add serialize and deserialize for agent settings

Co-authored-by: Oleksiy Syvokon <oleksiy.syvokon@gmail.com>
This commit is contained in:
Smit Barmase 2025-08-22 15:58:00 +05:30
parent bbbc168f50
commit dfa7cd431a
No known key found for this signature in database

View file

@ -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<D>(deserializer: D) -> Result<Self, D::Error>
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<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
match self {
AgentEditorMode::EditorModeOverride(mode) => mode.serialize(serializer),
AgentEditorMode::Inherit => serializer.serialize_str("inherit"),
}
}
}
impl From<EditorMode> for AgentEditorMode {
fn from(b: EditorMode) -> Self {
AgentEditorMode::EditorModeOverride(b)