use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug, JsonSchema, Clone)]
#[serde(rename_all = "camelCase")]
pub struct EmmyrcWorkspace {
#[serde(default)]
pub ignore_dir: Vec<String>,
#[serde(default)]
pub ignore_globs: Vec<String>,
#[serde(default)]
pub library: Vec<EmmyLibraryItem>,
#[serde(default)]
pub package_dirs: Vec<String>,
#[serde(default)]
pub workspace_roots: Vec<String>,
#[serde(default)]
pub preload_file_size: i32,
#[serde(default = "encoding_default")]
pub encoding: String,
#[serde(default)]
pub module_map: Vec<EmmyrcWorkspaceModuleMap>,
#[serde(default = "reindex_duration_default")]
#[schemars(extend("x-vscode-setting" = true))]
pub reindex_duration: u64,
#[serde(default = "enable_reindex_default")]
#[schemars(extend("x-vscode-setting" = true))]
pub enable_reindex: bool,
}
impl Default for EmmyrcWorkspace {
fn default() -> Self {
Self {
ignore_dir: Vec::new(),
ignore_globs: Vec::new(),
library: Vec::new(),
package_dirs: Vec::new(),
workspace_roots: Vec::new(),
preload_file_size: 0,
encoding: encoding_default(),
module_map: Vec::new(),
reindex_duration: 5000,
enable_reindex: false,
}
}
}
#[derive(Serialize, Deserialize, Debug, JsonSchema, Clone)]
pub struct EmmyrcWorkspaceModuleMap {
pub pattern: String,
pub replace: String,
}
#[derive(Serialize, Deserialize, Debug, JsonSchema, Clone, Hash, PartialEq, Eq)]
#[serde(untagged)]
pub enum EmmyLibraryItem {
Path(String),
Config(EmmyLibraryConfig),
}
impl EmmyLibraryItem {
pub fn get_path(&self) -> &String {
match self {
EmmyLibraryItem::Path(p) => p,
EmmyLibraryItem::Config(c) => &c.path,
}
}
}
#[derive(Serialize, Deserialize, Debug, JsonSchema, Clone, Hash, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub struct EmmyLibraryConfig {
pub path: String,
#[serde(default)]
pub ignore_dir: Vec<String>,
#[serde(default)]
pub ignore_globs: Vec<String>,
}
fn encoding_default() -> String {
"utf-8".to_string()
}
fn reindex_duration_default() -> u64 {
5000
}
fn enable_reindex_default() -> bool {
false
}