diff --git a/src/checker/mod.rs b/src/checker/mod.rs index daa7e1e..88898e9 100644 --- a/src/checker/mod.rs +++ b/src/checker/mod.rs @@ -2,13 +2,14 @@ mod actuator; mod http; mod tcp; +use std::fmt::{Display, Formatter, Result}; + +use serde_json::json; + pub use crate::checker::actuator::Checker as ActuatorChecker; pub use crate::checker::http::Checker as HttpChecker; pub use crate::checker::tcp::Checker as TcpChecker; -use crate::config; use crate::config::get_config; -use serde_json::json; -use std::fmt::{Display, Formatter, Result}; pub struct CheckResult { pub name: String, @@ -17,14 +18,7 @@ pub struct CheckResult { impl Display for CheckResult { fn fmt(&self, f: &mut Formatter<'_>) -> Result { - let color_config = match get_config().colors { - Some(color_config) => color_config, - None => config::ColorConfig { - up: String::from("#00FF00"), - warn: String::from("#FFFF00"), - down: String::from("#FF0000"), - }, - }; + let color_config = get_config().colors; let color = match &self.state { CheckState::Up => color_config.up, CheckState::Warn => color_config.warn, diff --git a/src/config.rs b/src/config.rs index bf8f532..3461655 100644 --- a/src/config.rs +++ b/src/config.rs @@ -10,7 +10,8 @@ use serde::{Deserialize, Deserializer}; pub struct Config { #[serde(default, deserialize_with = "deserialize_duration")] pub interval: Option, - pub colors: Option, + #[serde(default)] + pub colors: ColorConfig, #[serde(default)] pub checks: Vec, } @@ -22,6 +23,16 @@ pub struct ColorConfig { pub down: String, } +impl Default for ColorConfig { + fn default() -> Self { + Self { + up: String::from("#00FF00"), + warn: String::from("#FFFF00"), + down: String::from("#FF0000"), + } + } +} + #[derive(Deserialize)] pub struct CheckConfig { pub name: String, @@ -53,13 +64,13 @@ pub fn get_config() -> Config { Ok(config) => config, Err(_e) => Config { interval: None, - colors: None, + colors: ColorConfig::default(), checks: vec![], }, }, Err(_) => Config { interval: None, - colors: None, + colors: ColorConfig::default(), checks: vec![], }, } @@ -195,6 +206,20 @@ mod tests { assert_eq!(config.checks.len(), 0); } + #[test] + fn test_should_parse_config_with_default_colors() { + let config: Config = toml::from_str( + r#" + interval = "2m 3s" + "#, + ) + .unwrap(); + + assert_eq!(config.colors.up, "#00FF00".to_string()); + assert_eq!(config.colors.warn, "#FFFF00".to_string()); + assert_eq!(config.colors.down, "#FF0000".to_string()); + } + #[test] fn test_should_parse_durations() { assert_eq!(parse_duration("1m30s"), Some(Duration::from_secs(90)));