workspace_settings.rs

 1use schemars::JsonSchema;
 2use serde::{Deserialize, Serialize};
 3use settings::Setting;
 4
 5#[derive(Deserialize)]
 6pub struct WorkspaceSettings {
 7    pub active_pane_magnification: f32,
 8    pub confirm_quit: bool,
 9    pub show_call_status_icon: bool,
10    pub autosave: AutosaveSetting,
11}
12
13#[derive(Clone, Default, Serialize, Deserialize, JsonSchema)]
14pub struct WorkspaceSettingsContent {
15    pub active_pane_magnification: Option<f32>,
16    pub confirm_quit: Option<bool>,
17    pub show_call_status_icon: Option<bool>,
18    pub autosave: Option<AutosaveSetting>,
19}
20
21#[derive(Copy, Clone, Debug, Serialize, Deserialize, PartialEq, Eq, JsonSchema)]
22#[serde(rename_all = "snake_case")]
23pub enum AutosaveSetting {
24    Off,
25    AfterDelay { milliseconds: u64 },
26    OnFocusChange,
27    OnWindowChange,
28}
29
30#[derive(Copy, Clone, Debug, Default, Serialize, Deserialize, JsonSchema)]
31pub struct GitSettings {
32    pub git_gutter: Option<GitGutterSetting>,
33    pub gutter_debounce: Option<u64>,
34}
35
36#[derive(Clone, Copy, Debug, Default, Serialize, Deserialize, JsonSchema)]
37#[serde(rename_all = "snake_case")]
38pub enum GitGutterSetting {
39    #[default]
40    TrackedFiles,
41    Hide,
42}
43
44impl Setting for WorkspaceSettings {
45    const KEY: Option<&'static str> = None;
46
47    type FileContent = WorkspaceSettingsContent;
48
49    fn load(
50        default_value: &Self::FileContent,
51        user_values: &[&Self::FileContent],
52        _: &gpui::AppContext,
53    ) -> anyhow::Result<Self> {
54        Self::load_via_json_merge(default_value, user_values)
55    }
56}