settings.rs

 1use crate::AgentServerCommand;
 2use anyhow::Result;
 3use gpui::App;
 4use schemars::JsonSchema;
 5use serde::{Deserialize, Serialize};
 6use settings::{Settings, SettingsSources};
 7
 8pub fn init(cx: &mut App) {
 9    AllAgentServersSettings::register(cx);
10}
11
12#[derive(Default, Deserialize, Serialize, Clone, JsonSchema, Debug)]
13pub struct AllAgentServersSettings {
14    pub gemini: Option<AgentServerSettings>,
15    pub claude: Option<AgentServerSettings>,
16    pub codex: Option<AgentServerSettings>,
17}
18
19#[derive(Deserialize, Serialize, Clone, JsonSchema, Debug)]
20pub struct AgentServerSettings {
21    #[serde(flatten)]
22    pub command: AgentServerCommand,
23}
24
25impl settings::Settings for AllAgentServersSettings {
26    const KEY: Option<&'static str> = Some("agent_servers");
27
28    type FileContent = Self;
29
30    fn load(sources: SettingsSources<Self::FileContent>, _: &mut App) -> Result<Self> {
31        let mut settings = AllAgentServersSettings::default();
32
33        for AllAgentServersSettings {
34            gemini,
35            claude,
36            codex,
37        } in sources.defaults_and_customizations()
38        {
39            if gemini.is_some() {
40                settings.gemini = gemini.clone();
41            }
42            if claude.is_some() {
43                settings.claude = claude.clone();
44            }
45            if codex.is_some() {
46                settings.codex = codex.clone();
47            }
48        }
49
50        Ok(settings)
51    }
52
53    fn import_from_vscode(_vscode: &settings::VsCodeSettings, _current: &mut Self::FileContent) {}
54}