use serde::Serialize;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
#[serde(rename_all = "snake_case")]
pub enum DependencyStatus {
Disabled,
Configured,
Healthy,
Degraded,
Unavailable,
}
impl DependencyStatus {
pub fn is_available(self) -> bool {
matches!(self, Self::Healthy | Self::Degraded)
}
pub fn is_degraded(self) -> bool {
matches!(self, Self::Degraded)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn disabled_is_not_available() {
assert!(!DependencyStatus::Disabled.is_available());
assert!(!DependencyStatus::Disabled.is_degraded());
}
#[test]
fn healthy_is_available_not_degraded() {
assert!(DependencyStatus::Healthy.is_available());
assert!(!DependencyStatus::Healthy.is_degraded());
}
#[test]
fn degraded_is_available_and_degraded() {
assert!(DependencyStatus::Degraded.is_available());
assert!(DependencyStatus::Degraded.is_degraded());
}
#[test]
fn unavailable_is_neither() {
assert!(!DependencyStatus::Unavailable.is_available());
assert!(!DependencyStatus::Unavailable.is_degraded());
}
#[test]
fn serializes_to_snake_case() {
let json = serde_json::to_string(&DependencyStatus::Healthy).unwrap();
assert_eq!(json, "\"healthy\"");
let json = serde_json::to_string(&DependencyStatus::Degraded).unwrap();
assert_eq!(json, "\"degraded\"");
let json = serde_json::to_string(&DependencyStatus::Disabled).unwrap();
assert_eq!(json, "\"disabled\"");
}
}