darpan 0.2.0

Linux developer service monitoring utility with auto-detection, real-time health checks, and interactive TUI for databases, APIs, Docker containers, and more
Documentation
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
}