Skip to content
52 changes: 52 additions & 0 deletions src/status/condition/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,58 @@ pub struct ClusterCondition {
pub type_: ClusterConditionType,
}

impl std::fmt::Display for ClusterCondition {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let out = match self.type_ {
ClusterConditionType::Available => match self.status {
ClusterConditionStatus::True => "Available",
ClusterConditionStatus::False => "Unavailable",
ClusterConditionStatus::Unknown => "Availability unknown",
},
ClusterConditionType::Degraded => match self.status {
ClusterConditionStatus::True => "Degraded",
ClusterConditionStatus::False => "Not degraded",
ClusterConditionStatus::Unknown => "Degradation unknown",
},
ClusterConditionType::Progressing => match self.status {
ClusterConditionStatus::True => "Progressing",
ClusterConditionStatus::False => "Not progressing",
ClusterConditionStatus::Unknown => "Progression unknown",
},
ClusterConditionType::ReconciliationPaused => match self.status {
ClusterConditionStatus::True => "Reconciling",
ClusterConditionStatus::False => "Not reconciling",
ClusterConditionStatus::Unknown => "Reconciliation unknown",
},
ClusterConditionType::Stopped => match self.status {
ClusterConditionStatus::True => "Stopped",
ClusterConditionStatus::False => "Running",
ClusterConditionStatus::Unknown => "Stopped status unknown",
},
};

out.fmt(f)
}
}

impl ClusterCondition {
/// Returns a short display string. This method wraps the
/// [`std::fmt::Display`] implementation of the [`ClusterCondition`].
pub fn display_short(&self) -> String {
self.to_string()
}

/// Returns a long display string. This method uses the
/// [`std::fmt::Display`] implementation of the [`ClusterCondition`] and
/// combines it with the optional message to provide more context.
pub fn display_long(&self) -> String {
match &self.message {
Some(message) => format!("{}: {}", self.to_string(), message),
None => self.to_string(),
}
}
}

#[derive(
Clone,
Copy,
Expand Down