Skip to content

Commit 0a43fd2

Browse files
authored
fix: adds custom ser deser logic for tool origin for conversation persistant (#1816)
1 parent 1834104 commit 0a43fd2

File tree

1 file changed

+27
-1
lines changed
  • crates/chat-cli/src/cli/chat/tools

1 file changed

+27
-1
lines changed

crates/chat-cli/src/cli/chat/tools/mod.rs

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,12 +208,38 @@ pub struct ToolSpec {
208208
pub tool_origin: ToolOrigin,
209209
}
210210

211-
#[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq, Hash)]
211+
#[derive(Debug, Clone, Eq, PartialEq, Hash)]
212212
pub enum ToolOrigin {
213213
Native,
214214
McpServer(String),
215215
}
216216

217+
impl<'de> Deserialize<'de> for ToolOrigin {
218+
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
219+
where
220+
D: serde::Deserializer<'de>,
221+
{
222+
let s = String::deserialize(deserializer)?;
223+
if s == "native___" {
224+
Ok(ToolOrigin::Native)
225+
} else {
226+
Ok(ToolOrigin::McpServer(s))
227+
}
228+
}
229+
}
230+
231+
impl Serialize for ToolOrigin {
232+
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
233+
where
234+
S: serde::Serializer,
235+
{
236+
match self {
237+
ToolOrigin::Native => serializer.serialize_str("native___"),
238+
ToolOrigin::McpServer(server) => serializer.serialize_str(server),
239+
}
240+
}
241+
}
242+
217243
impl std::fmt::Display for ToolOrigin {
218244
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
219245
match self {

0 commit comments

Comments
 (0)