use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use serde_with::{DefaultOnError, serde_as};
#[serde_as]
#[derive(Serialize, Deserialize, Debug, JsonSchema, Clone)]
#[serde(rename_all = "camelCase")]
pub struct EmmyrcCompletion {
#[serde(default = "default_true")]
#[schemars(extend("x-vscode-setting" = true))]
pub enable: bool,
#[serde(default = "default_true")]
#[schemars(extend("x-vscode-setting" = true))]
pub auto_require: bool,
#[serde(default = "default_require_function")]
pub auto_require_function: String,
#[serde(default)]
pub auto_require_naming_convention: EmmyrcFilenameConvention,
#[serde(default = "default_auto_require_separator")]
pub auto_require_separator: String,
#[serde(default)]
#[serde_as(deserialize_as = "DefaultOnError")]
pub call_snippet: bool,
#[serde(default = "default_postfix")]
#[schemars(extend("x-vscode-setting" = {
"type": ["string", "null"],
"default": null,
"enum": [null, "@", ".", ":"],
"enumItemLabels": ["Default"],
"markdownEnumDescriptions": ["%config.common.enum.default.description%"],
}))]
pub postfix: String,
#[serde(default = "default_true")]
#[schemars(extend("x-vscode-setting" = true))]
pub base_function_includes_name: bool,
}
impl Default for EmmyrcCompletion {
fn default() -> Self {
Self {
enable: default_true(),
auto_require: default_true(),
auto_require_function: default_require_function(),
auto_require_naming_convention: Default::default(),
call_snippet: false,
auto_require_separator: default_auto_require_separator(),
postfix: default_postfix(),
base_function_includes_name: default_true(),
}
}
}
fn default_true() -> bool {
true
}
fn default_require_function() -> String {
"require".to_string()
}
fn default_postfix() -> String {
"@".to_string()
}
fn default_auto_require_separator() -> String {
".".to_string()
}
#[derive(Serialize, Deserialize, Debug, JsonSchema, Clone, Copy)]
#[serde(rename_all = "kebab-case")]
#[derive(Default)]
pub enum EmmyrcFilenameConvention {
#[default]
Keep,
SnakeCase,
PascalCase,
CamelCase,
KeepClass,
}