1
0
mirror of https://github.com/pcvolkmer/checkbar.git synced 2025-04-19 19:16:50 +00:00

Implement and use Default for ColorConfig

This commit is contained in:
Paul-Christian Volkmer 2023-01-02 20:28:00 +01:00
parent 102e707b4d
commit f32b4329ae
2 changed files with 33 additions and 14 deletions

View File

@ -2,13 +2,14 @@ mod actuator;
mod http; mod http;
mod tcp; mod tcp;
use std::fmt::{Display, Formatter, Result};
use serde_json::json;
pub use crate::checker::actuator::Checker as ActuatorChecker; pub use crate::checker::actuator::Checker as ActuatorChecker;
pub use crate::checker::http::Checker as HttpChecker; pub use crate::checker::http::Checker as HttpChecker;
pub use crate::checker::tcp::Checker as TcpChecker; pub use crate::checker::tcp::Checker as TcpChecker;
use crate::config;
use crate::config::get_config; use crate::config::get_config;
use serde_json::json;
use std::fmt::{Display, Formatter, Result};
pub struct CheckResult { pub struct CheckResult {
pub name: String, pub name: String,
@ -17,14 +18,7 @@ pub struct CheckResult {
impl Display for CheckResult { impl Display for CheckResult {
fn fmt(&self, f: &mut Formatter<'_>) -> Result { fn fmt(&self, f: &mut Formatter<'_>) -> Result {
let color_config = match get_config().colors { let color_config = 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 = match &self.state { let color = match &self.state {
CheckState::Up => color_config.up, CheckState::Up => color_config.up,
CheckState::Warn => color_config.warn, CheckState::Warn => color_config.warn,

View File

@ -10,7 +10,8 @@ use serde::{Deserialize, Deserializer};
pub struct Config { pub struct Config {
#[serde(default, deserialize_with = "deserialize_duration")] #[serde(default, deserialize_with = "deserialize_duration")]
pub interval: Option<Duration>, pub interval: Option<Duration>,
pub colors: Option<ColorConfig>, #[serde(default)]
pub colors: ColorConfig,
#[serde(default)] #[serde(default)]
pub checks: Vec<CheckConfig>, pub checks: Vec<CheckConfig>,
} }
@ -22,6 +23,16 @@ pub struct ColorConfig {
pub down: String, 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)] #[derive(Deserialize)]
pub struct CheckConfig { pub struct CheckConfig {
pub name: String, pub name: String,
@ -53,13 +64,13 @@ pub fn get_config() -> Config {
Ok(config) => config, Ok(config) => config,
Err(_e) => Config { Err(_e) => Config {
interval: None, interval: None,
colors: None, colors: ColorConfig::default(),
checks: vec![], checks: vec![],
}, },
}, },
Err(_) => Config { Err(_) => Config {
interval: None, interval: None,
colors: None, colors: ColorConfig::default(),
checks: vec![], checks: vec![],
}, },
} }
@ -195,6 +206,20 @@ mod tests {
assert_eq!(config.checks.len(), 0); 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] #[test]
fn test_should_parse_durations() { fn test_should_parse_durations() {
assert_eq!(parse_duration("1m30s"), Some(Duration::from_secs(90))); assert_eq!(parse_duration("1m30s"), Some(Duration::from_secs(90)));