extension.rs

 1use std::sync::Arc;
 2
 3use collections::HashMap;
 4use schemars::JsonSchema;
 5use serde::{Deserialize, Serialize};
 6use serde_with::skip_serializing_none;
 7use settings_macros::MergeFrom;
 8
 9#[skip_serializing_none]
10#[derive(Debug, PartialEq, Clone, Default, Serialize, Deserialize, JsonSchema, MergeFrom)]
11pub struct ExtensionSettingsContent {
12    /// The extensions that should be automatically installed by Zed.
13    ///
14    /// This is used to make functionality provided by extensions (e.g., language support)
15    /// available out-of-the-box.
16    ///
17    /// Default: { "html": true }
18    #[serde(default)]
19    pub auto_install_extensions: HashMap<Arc<str>, bool>,
20    #[serde(default)]
21    pub auto_update_extensions: HashMap<Arc<str>, bool>,
22    /// The capabilities granted to extensions.
23    #[serde(default)]
24    pub granted_extension_capabilities: Option<Vec<ExtensionCapabilityContent>>,
25}
26
27/// A capability for an extension.
28#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize, JsonSchema)]
29#[serde(tag = "kind", rename_all = "snake_case")]
30pub enum ExtensionCapabilityContent {
31    #[serde(rename = "process:exec")]
32    ProcessExec(ProcessExecCapabilityContent),
33    DownloadFile(DownloadFileCapabilityContent),
34    #[serde(rename = "npm:install")]
35    NpmInstallPackage(NpmInstallPackageCapabilityContent),
36}
37
38#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize, JsonSchema)]
39#[serde(rename_all = "snake_case")]
40pub struct ProcessExecCapabilityContent {
41    /// The command to execute.
42    pub command: String,
43    /// The arguments to pass to the command. Use `*` for a single wildcard argument.
44    /// If the last element is `**`, then any trailing arguments are allowed.
45    pub args: Vec<String>,
46}
47
48#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize, JsonSchema)]
49#[serde(rename_all = "snake_case")]
50pub struct DownloadFileCapabilityContent {
51    pub host: String,
52    pub path: Vec<String>,
53}
54
55#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize, JsonSchema)]
56#[serde(rename_all = "snake_case")]
57pub struct NpmInstallPackageCapabilityContent {
58    pub package: String,
59}