mirror of
https://github.com/zeke-chin/cursor-api.git
synced 2025-10-05 23:46:51 +08:00
fix: deserialize_single_or_vec
This commit is contained in:
@@ -18,12 +18,12 @@ use futures::{
|
|||||||
};
|
};
|
||||||
// use http::HeaderName as HttpHeaderName;
|
// use http::HeaderName as HttpHeaderName;
|
||||||
use regex::Regex;
|
use regex::Regex;
|
||||||
|
use serde::Deserializer;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
use std::{convert::Infallible, time::Duration};
|
use std::{convert::Infallible, time::Duration};
|
||||||
use tower_http::cors::{Any, CorsLayer};
|
use tower_http::cors::{Any, CorsLayer};
|
||||||
use uuid::Uuid;
|
use uuid::Uuid;
|
||||||
|
|
||||||
mod hex_utils;
|
mod hex_utils;
|
||||||
use hex_utils::{chunk_to_utf8_string, string_to_hex};
|
use hex_utils::{chunk_to_utf8_string, string_to_hex};
|
||||||
|
|
||||||
@@ -31,9 +31,30 @@ use hex_utils::{chunk_to_utf8_string, string_to_hex};
|
|||||||
#[derive(Debug, Deserialize)]
|
#[derive(Debug, Deserialize)]
|
||||||
struct Message {
|
struct Message {
|
||||||
role: String,
|
role: String,
|
||||||
|
#[serde(deserialize_with = "deserialize_single_or_vec")]
|
||||||
content: Vec<ContentPart>,
|
content: Vec<ContentPart>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 添加一个辅助枚举
|
||||||
|
#[derive(Deserialize)]
|
||||||
|
#[serde(untagged)]
|
||||||
|
enum SingleOrVec<T> {
|
||||||
|
Single(T),
|
||||||
|
Vec(Vec<T>),
|
||||||
|
}
|
||||||
|
|
||||||
|
// 简单的辅助函数
|
||||||
|
fn deserialize_single_or_vec<'de, D, T>(deserializer: D) -> Result<Vec<T>, D::Error>
|
||||||
|
where
|
||||||
|
D: Deserializer<'de>,
|
||||||
|
T: Deserialize<'de>,
|
||||||
|
{
|
||||||
|
let value = SingleOrVec::deserialize(deserializer)?;
|
||||||
|
Ok(match value {
|
||||||
|
SingleOrVec::Single(x) => vec![x],
|
||||||
|
SingleOrVec::Vec(x) => x,
|
||||||
|
})
|
||||||
|
}
|
||||||
#[derive(Debug, Deserialize)]
|
#[derive(Debug, Deserialize)]
|
||||||
#[serde(tag = "type")]
|
#[serde(tag = "type")]
|
||||||
enum ContentPart {
|
enum ContentPart {
|
||||||
|
Reference in New Issue
Block a user