use std::collections::HashMap;
#[derive(Debug, Clone)]
pub struct HealthCheckResult {
pub results: HashMap<String, bool>,
pub errors: HashMap<String, String>,
}
impl HealthCheckResult {
pub fn healthy(&self) -> bool {
!self.results.is_empty() && self.results.values().all(|v| *v)
}
pub fn passed(&self) -> Vec<&str> {
self.results
.iter()
.filter_map(|(k, v)| if *v { Some(k.as_str()) } else { None })
.collect()
}
pub fn failed(&self) -> Vec<&str> {
self.results
.iter()
.filter_map(|(k, v)| if !*v { Some(k.as_str()) } else { None })
.collect()
}
}
impl std::fmt::Display for HealthCheckResult {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let total = self.results.len();
let passed = self.passed().len();
let status = if self.healthy() {
"HEALTHY"
} else {
"UNHEALTHY"
};
write!(f, "<HealthCheckResult {} {}/{}>", status, passed, total)
}
}