1use schemars::JsonSchema;
2use serde::{Deserialize, Serialize};
3use settings2::Settings;
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 Settings 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 _: &mut gpui::AppContext,
53 ) -> anyhow::Result<Self> {
54 Self::load_via_json_merge(default_value, user_values)
55 }
56}