extension_settings.rs

 1use anyhow::Result;
 2use collections::HashMap;
 3use gpui::AppContext;
 4use schemars::JsonSchema;
 5use serde::{Deserialize, Serialize};
 6use settings::Settings;
 7use std::sync::Arc;
 8
 9#[derive(Deserialize, Serialize, Debug, Default, Clone, JsonSchema)]
10pub struct ExtensionSettings {
11    #[serde(default)]
12    pub auto_update_extensions: HashMap<Arc<str>, bool>,
13}
14
15impl ExtensionSettings {
16    pub fn should_auto_update(&self, extension_id: &str) -> bool {
17        self.auto_update_extensions
18            .get(extension_id)
19            .copied()
20            .unwrap_or(true)
21    }
22}
23
24impl Settings for ExtensionSettings {
25    const KEY: Option<&'static str> = None;
26
27    type FileContent = Self;
28
29    fn load(
30        _default_value: &Self::FileContent,
31        user_values: &[&Self::FileContent],
32        _cx: &mut AppContext,
33    ) -> Result<Self>
34    where
35        Self: Sized,
36    {
37        Ok(user_values.get(0).copied().cloned().unwrap_or_default())
38    }
39}