use anyhow; use schemars::JsonSchema; use serde_derive::{Deserialize, Serialize}; use settings::Settings; use workspace::dock::DockPosition; #[derive(Deserialize, Debug)] pub struct CollaborationPanelSettings { pub button: bool, pub dock: DockPosition, pub default_width: f32, } #[derive(Deserialize, Debug)] pub struct ChatPanelSettings { pub button: bool, pub dock: DockPosition, pub default_width: f32, } #[derive(Deserialize, Debug)] pub struct NotificationPanelSettings { pub button: bool, pub dock: DockPosition, pub default_width: f32, } #[derive(Clone, Default, Serialize, Deserialize, JsonSchema, Debug)] pub struct PanelSettingsContent { pub button: Option, pub dock: Option, pub default_width: Option, } impl Settings for CollaborationPanelSettings { const KEY: Option<&'static str> = Some("collaboration_panel"); type FileContent = PanelSettingsContent; fn load( default_value: &Self::FileContent, user_values: &[&Self::FileContent], _: &mut gpui::AppContext, ) -> anyhow::Result { Self::load_via_json_merge(default_value, user_values) } } impl Settings for ChatPanelSettings { const KEY: Option<&'static str> = Some("chat_panel"); type FileContent = PanelSettingsContent; fn load( default_value: &Self::FileContent, user_values: &[&Self::FileContent], _: &mut gpui::AppContext, ) -> anyhow::Result { Self::load_via_json_merge(default_value, user_values) } } impl Settings for NotificationPanelSettings { const KEY: Option<&'static str> = Some("notification_panel"); type FileContent = PanelSettingsContent; fn load( default_value: &Self::FileContent, user_values: &[&Self::FileContent], _: &mut gpui::AppContext, ) -> anyhow::Result { Self::load_via_json_merge(default_value, user_values) } }