vtcode_config/
status_line.rs1use 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]
9 Auto,
10 Command,
12 Hidden,
14}
15
16impl std::str::FromStr for StatusLineMode {
17 type Err = String;
18
19 fn from_str(s: &str) -> Result<Self, Self::Err> {
20 match s.trim().to_lowercase().as_str() {
21 "auto" => Ok(StatusLineMode::Auto),
22 "command" => Ok(StatusLineMode::Command),
23 "hidden" => Ok(StatusLineMode::Hidden),
24 _ => Err(format!("Invalid status line mode: {}", s)),
25 }
26 }
27}
28
29#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
30#[derive(Debug, Clone, Deserialize, Serialize)]
31pub struct StatusLineConfig {
32 #[serde(default = "default_status_line_mode")]
33 pub mode: StatusLineMode,
34 #[serde(default)]
35 pub command: Option<String>,
36 #[serde(default = "default_status_line_refresh_interval_ms")]
37 pub refresh_interval_ms: u64,
38 #[serde(default = "default_status_line_command_timeout_ms")]
39 pub command_timeout_ms: u64,
40}
41
42impl StatusLineConfig {
43 pub fn effective_mode(&self) -> StatusLineMode {
49 self.mode.clone()
50 }
51}
52
53impl Default for StatusLineConfig {
54 fn default() -> Self {
55 Self {
56 mode: default_status_line_mode(),
57 command: None,
58 refresh_interval_ms: default_status_line_refresh_interval_ms(),
59 command_timeout_ms: default_status_line_command_timeout_ms(),
60 }
61 }
62}
63
64pub const DEFAULT_STATUS_LINE_MODE: StatusLineMode = StatusLineMode::Auto;
68
69fn default_status_line_mode() -> StatusLineMode {
70 DEFAULT_STATUS_LINE_MODE
71}
72
73fn default_status_line_refresh_interval_ms() -> u64 {
74 crate::constants::ui::STATUS_LINE_REFRESH_INTERVAL_MS
75}
76
77fn default_status_line_command_timeout_ms() -> u64 {
78 crate::constants::ui::STATUS_LINE_COMMAND_TIMEOUT_MS
79}