兼容旧版本,新增字段 id 的反序列化逻辑

This commit is contained in:
2026-07-13 14:29:17 +08:00
parent 6beaab0454
commit 6edb826324
@@ -1,7 +1,7 @@
//! 画布Agent对话契约:与 packages/shared/src/contracts/editorAgent.ts 保持同形。
//! 会话元数据存 SpacetimeDB,消息正文整体存 OSSeditor-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,