use serde::{Deserialize, Serialize};
use std::path::PathBuf;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UserConfig {
pub global: GlobalSettings,
pub detection: DetectionSettings,
pub health_checks: HealthCheckSettings,
pub projects: Vec<ProjectSettings>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GlobalSettings {
#[serde(default = "default_theme")]
pub theme: String,
#[serde(default = "default_refresh_interval")]
pub refresh_interval: u64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DetectionSettings {
#[serde(default = "default_enabled_detectors")]
pub enabled_detectors: Vec<String>,
#[serde(default = "default_port_range")]
pub port_range: (u16, u16),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct HealthCheckSettings {
#[serde(default = "default_timeout")]
pub timeout: u64,
#[serde(default = "default_retry_count")]
pub retry_count: u32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ProjectSettings {
pub path: PathBuf,
#[serde(default)]
pub auto_load: bool,
}
impl Default for UserConfig {
fn default() -> Self {
Self {
global: GlobalSettings {
theme: default_theme(),
refresh_interval: default_refresh_interval(),
},
detection: DetectionSettings {
enabled_detectors: default_enabled_detectors(),
port_range: default_port_range(),
},
health_checks: HealthCheckSettings {
timeout: default_timeout(),
retry_count: default_retry_count(),
},
projects: Vec::new(),
}
}
}
fn default_theme() -> String {
"dark".to_string()
}
fn default_refresh_interval() -> u64 {
5
}
fn default_enabled_detectors() -> Vec<String> {
vec!["port".to_string(), "process".to_string(), "docker".to_string()]
}
fn default_port_range() -> (u16, u16) {
(3000, 9999)
}
fn default_timeout() -> u64 {
3
}
fn default_retry_count() -> u32 {
2
}