settings.rs

 1//! Provides access to Zed settings.
 2
 3#[path = "../wit/since_v0.1.0/settings.rs"]
 4mod types;
 5
 6use crate::{wit, Result, SettingsLocation, Worktree};
 7use serde_json;
 8pub use types::*;
 9
10impl LanguageSettings {
11    /// Returns the [`LanguageSettings`] for the given language.
12    pub fn for_worktree(language: Option<&str>, worktree: &Worktree) -> Result<Self> {
13        let location = SettingsLocation {
14            worktree_id: worktree.id(),
15            path: worktree.root_path(),
16        };
17        let settings_json = wit::get_settings(Some(&location), "language", language)?;
18        let settings: Self = serde_json::from_str(&settings_json).map_err(|err| err.to_string())?;
19        Ok(settings)
20    }
21}
22
23impl LspSettings {
24    /// Returns the [`LspSettings`] for the given language server.
25    pub fn for_worktree(language_server_name: &str, worktree: &Worktree) -> Result<Self> {
26        let location = SettingsLocation {
27            worktree_id: worktree.id(),
28            path: worktree.root_path(),
29        };
30        let settings_json = wit::get_settings(Some(&location), "lsp", Some(language_server_name))?;
31        let settings: Self = serde_json::from_str(&settings_json).map_err(|err| err.to_string())?;
32        Ok(settings)
33    }
34}