vtcode_config/
status_line.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
4#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
5#[derive(Default)]
6pub enum StatusLineMode {
7    #[default]
8    Auto,
9    Command,
10    Hidden,
11}
12
13impl std::str::FromStr for StatusLineMode {
14    type Err = String;
15
16    fn from_str(s: &str) -> Result<Self, Self::Err> {
17        match s.trim().to_lowercase().as_str() {
18            "auto" => Ok(StatusLineMode::Auto),
19            "command" => Ok(StatusLineMode::Command),
20            "hidden" => Ok(StatusLineMode::Hidden),
21            _ => Err(format!("Invalid status line mode: {}", s)),
22        }
23    }
24}
25
26#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
27#[derive(Debug, Clone, Deserialize, Serialize)]
28pub struct StatusLineConfig {
29    #[serde(default = "default_status_line_mode")]
30    pub mode: StatusLineMode,
31    #[serde(default)]
32    pub command: Option<String>,
33    #[serde(default = "default_status_line_refresh_interval_ms")]
34    pub refresh_interval_ms: u64,
35    #[serde(default = "default_status_line_command_timeout_ms")]
36    pub command_timeout_ms: u64,
37}
38
39impl Default for StatusLineConfig {
40    fn default() -> Self {
41        Self {
42            mode: default_status_line_mode(),
43            command: None,
44            refresh_interval_ms: default_status_line_refresh_interval_ms(),
45            command_timeout_ms: default_status_line_command_timeout_ms(),
46        }
47    }
48}
49
50fn default_status_line_mode() -> StatusLineMode {
51    StatusLineMode::Auto
52}
53
54fn default_status_line_refresh_interval_ms() -> u64 {
55    crate::constants::ui::STATUS_LINE_REFRESH_INTERVAL_MS
56}
57
58fn default_status_line_command_timeout_ms() -> u64 {
59    crate::constants::ui::STATUS_LINE_COMMAND_TIMEOUT_MS
60}