diff --git a/crates/chat-cli/src/cli/chat/tools/mod.rs b/crates/chat-cli/src/cli/chat/tools/mod.rs index 469ba90855..9c941b50c1 100644 --- a/crates/chat-cli/src/cli/chat/tools/mod.rs +++ b/crates/chat-cli/src/cli/chat/tools/mod.rs @@ -208,12 +208,38 @@ pub struct ToolSpec { pub tool_origin: ToolOrigin, } -#[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq, Hash)] +#[derive(Debug, Clone, Eq, PartialEq, Hash)] pub enum ToolOrigin { Native, McpServer(String), } +impl<'de> Deserialize<'de> for ToolOrigin { + fn deserialize(deserializer: D) -> Result + where + D: serde::Deserializer<'de>, + { + let s = String::deserialize(deserializer)?; + if s == "native___" { + Ok(ToolOrigin::Native) + } else { + Ok(ToolOrigin::McpServer(s)) + } + } +} + +impl Serialize for ToolOrigin { + fn serialize(&self, serializer: S) -> Result + where + S: serde::Serializer, + { + match self { + ToolOrigin::Native => serializer.serialize_str("native___"), + ToolOrigin::McpServer(server) => serializer.serialize_str(server), + } + } +} + impl std::fmt::Display for ToolOrigin { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self {