use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
pub mod context_keys {
pub const LINE_NUMBERS: &str = "line_numbers";
pub const LINE_WRAP: &str = "line_wrap";
pub const COMPOSE_MODE: &str = "compose_mode";
pub const FILE_EXPLORER: &str = "file_explorer";
pub const FILE_EXPLORER_FOCUSED: &str = "file_explorer_focused";
pub const MOUSE_CAPTURE: &str = "mouse_capture";
pub const MOUSE_HOVER: &str = "mouse_hover";
pub const LSP_AVAILABLE: &str = "lsp_available";
pub const FILE_EXPLORER_SHOW_HIDDEN: &str = "file_explorer_show_hidden";
pub const FILE_EXPLORER_SHOW_GITIGNORED: &str = "file_explorer_show_gitignored";
pub const HAS_SELECTION: &str = "has_selection";
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, JsonSchema)]
pub struct ProcessLimits {
#[serde(default)]
pub max_memory_percent: Option<u32>,
#[serde(default)]
pub max_cpu_percent: Option<u32>,
#[serde(default = "default_true")]
pub enabled: bool,
}
fn default_true() -> bool {
true
}
impl Default for ProcessLimits {
fn default() -> Self {
Self {
max_memory_percent: Some(50), max_cpu_percent: Some(90), enabled: cfg!(target_os = "linux"), }
}
}
impl ProcessLimits {
pub fn unlimited() -> Self {
Self {
max_memory_percent: None,
max_cpu_percent: None,
enabled: false,
}
}
pub fn default_cpu_limit_percent() -> u32 {
90
}
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct LspServerConfig {
pub command: String,
#[serde(default)]
pub args: Vec<String>,
#[serde(default = "default_true")]
pub enabled: bool,
#[serde(default)]
pub auto_start: bool,
#[serde(default)]
pub process_limits: ProcessLimits,
#[serde(default)]
pub initialization_options: Option<serde_json::Value>,
}