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]
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}