兼容旧版本,新增字段 id 的反序列化逻辑
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
//! 画布Agent对话契约:与 packages/shared/src/contracts/editorAgent.ts 保持同形。
|
||||
//! 会话元数据存 SpacetimeDB,消息正文整体存 OSS(editor-agent/{conversationId}.json)。
|
||||
|
||||
use serde::{Deserialize, Serialize};
|
||||
use serde::{Deserialize, Deserializer, Serialize};
|
||||
|
||||
pub const EDITOR_AGENT_MAX_ATTACHMENTS: usize = 9;
|
||||
pub const EDITOR_AGENT_TITLE_MAX_CHARS: usize = 20;
|
||||
@@ -155,10 +155,29 @@ pub struct EditorAgentToolCall {
|
||||
#[serde(default)]
|
||||
pub error: Option<String>,
|
||||
}
|
||||
fn deserialize_id_or_zero<'de, D>(deserializer: D) -> Result<usize, D::Error>
|
||||
where
|
||||
D: Deserializer<'de>,
|
||||
{
|
||||
#[derive(Deserialize)]
|
||||
#[serde(untagged)]
|
||||
enum IdOrZero {
|
||||
Num(usize),
|
||||
Str(String),
|
||||
Other(serde_json::Value),
|
||||
}
|
||||
|
||||
match IdOrZero::deserialize(deserializer)? {
|
||||
IdOrZero::Num(n) => Ok(n),
|
||||
_ => Ok(0),
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct EditorAgentMessage {
|
||||
// to compatible for legacy version
|
||||
#[serde(deserialize_with = "deserialize_id_or_zero")]
|
||||
pub id: usize,
|
||||
pub role: EditorAgentMessageRole,
|
||||
pub text: String,
|
||||
|
||||
Reference in New Issue
Block a user