From dfa7cd431a1cbc1d71166e23ee26a6d1677e1b7b Mon Sep 17 00:00:00 2001 From: Smit Barmase Date: Fri, 22 Aug 2025 15:58:00 +0530 Subject: [PATCH] add serialize and deserialize for agent settings Co-authored-by: Oleksiy Syvokon --- crates/agent_settings/src/agent_settings.rs | 31 +++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/crates/agent_settings/src/agent_settings.rs b/crates/agent_settings/src/agent_settings.rs index 82ba4dc34520908c6c8ac0c88e55f4a68ef825a0..c7772a6a1bd74f284c4f1478dfb85a01090543c3 100644 --- a/crates/agent_settings/src/agent_settings.rs +++ b/crates/agent_settings/src/agent_settings.rs @@ -7,7 +7,7 @@ use collections::IndexMap; use gpui::{App, Pixels, SharedString}; use language_model::LanguageModel; use schemars::{JsonSchema, json_schema}; -use serde::{Deserialize, Serialize}; +use serde::{Deserialize, Deserializer, Serialize, Serializer}; use settings::{Settings, SettingsSources}; use std::borrow::Cow; use vim_mode_setting::EditorMode; @@ -49,13 +49,40 @@ pub enum NotifyWhenAgentWaiting { Never, } -#[derive(Copy, Clone, Debug, PartialEq, Eq, Serialize, Deserialize, JsonSchema, Default)] +#[derive(Copy, Clone, Debug, PartialEq, Eq, JsonSchema, Default)] pub enum AgentEditorMode { EditorModeOverride(EditorMode), #[default] Inherit, } +impl<'de> Deserialize<'de> for AgentEditorMode { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + let s = String::deserialize(deserializer)?; + if s == "inherit" { + Ok(AgentEditorMode::Inherit) + } else { + let mode = EditorMode::deserialize(serde::de::value::StringDeserializer::new(s))?; + Ok(AgentEditorMode::EditorModeOverride(mode)) + } + } +} + +impl Serialize for AgentEditorMode { + fn serialize(&self, serializer: S) -> Result + where + S: Serializer, + { + match self { + AgentEditorMode::EditorModeOverride(mode) => mode.serialize(serializer), + AgentEditorMode::Inherit => serializer.serialize_str("inherit"), + } + } +} + impl From for AgentEditorMode { fn from(b: EditorMode) -> Self { AgentEditorMode::EditorModeOverride(b)