shuck_server/session/
options.rs1use lsp_types::Url;
2use rustc_hash::FxHashMap;
3use serde::Deserialize;
4
5use crate::session::settings::GlobalClientSettings;
6use crate::{Client, logging};
7
8pub(crate) type WorkspaceOptionsMap = FxHashMap<Url, ClientOptions>;
9
10#[derive(Debug, Deserialize, Default)]
11#[serde(rename_all = "camelCase")]
12pub struct GlobalOptions {
13 #[serde(default)]
14 client: ClientOptions,
15 #[serde(default)]
16 pub(crate) tracing: TracingOptions,
17}
18
19impl GlobalOptions {
20 pub fn into_settings(self, client: Client) -> GlobalClientSettings {
21 GlobalClientSettings::new(self.client, client)
22 }
23}
24
25#[derive(Clone, Debug, Default, Deserialize)]
26#[serde(rename_all = "camelCase")]
27pub struct ClientOptions {}
28
29#[derive(Debug, Deserialize, Default)]
30#[serde(rename_all = "camelCase")]
31pub(crate) struct TracingOptions {
32 pub(crate) log_level: Option<logging::LogLevel>,
33}
34
35#[derive(Debug, Default)]
36pub(crate) struct AllOptions {
37 pub(crate) global: GlobalOptions,
38 pub(crate) workspace: Option<WorkspaceOptionsMap>,
39}
40
41impl AllOptions {
42 pub(crate) fn from_value(value: serde_json::Value, _client: &Client) -> Self {
43 let global = serde_json::from_value::<GlobalOptions>(value).unwrap_or_default();
44 Self {
45 global,
46 workspace: Some(WorkspaceOptionsMap::default()),
47 }
48 }
49}