use std::borrow::Cow;
#[derive(Debug, Clone, PartialEq, Eq, Hash, strum::Display, strum::EnumIs)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum ComponentStatus {
#[strum(to_string = "Ready")]
Ready,
#[strum(to_string = "Initializing: {0}")]
Initializing(Cow<'static, str>),
#[strum(to_string = "Degraded: {0}")]
Degraded(Cow<'static, str>),
#[strum(to_string = "Unavailable: {0}")]
Unavailable(Cow<'static, str>),
}
#[auto_impl::auto_impl(&, Arc)]
pub trait ComponentStatusReporter {
fn component_status(&self) -> ComponentStatus;
}