use serde::{Deserialize, Serialize};
fn default_metrics_path() -> String {
"/metrics".into()
}
fn default_sync_interval_secs() -> u64 {
5
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct MetricsConfig {
#[serde(default)]
pub enabled: bool,
#[serde(default = "default_metrics_path")]
pub path: String,
#[serde(default = "default_sync_interval_secs")]
pub sync_interval_secs: u64,
}
impl Default for MetricsConfig {
fn default() -> Self {
Self {
enabled: false,
path: default_metrics_path(),
sync_interval_secs: default_sync_interval_secs(),
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_metrics_config_defaults() {
let config: MetricsConfig = toml::from_str("").unwrap();
assert!(!config.enabled);
assert_eq!(config.path, "/metrics");
assert_eq!(config.sync_interval_secs, 5);
}
#[test]
fn test_metrics_config_serde() {
let src = r#"
enabled = true
path = "/custom/metrics"
sync_interval_secs = 10
"#;
let config: MetricsConfig = toml::from_str(src).unwrap();
assert!(config.enabled);
assert_eq!(config.path, "/custom/metrics");
assert_eq!(config.sync_interval_secs, 10);
let serialized = toml::to_string(&config).unwrap();
let roundtrip: MetricsConfig = toml::from_str(&serialized).unwrap();
assert!(roundtrip.enabled);
assert_eq!(roundtrip.path, "/custom/metrics");
assert_eq!(roundtrip.sync_interval_secs, 10);
}
}