use std::fmt;
use serde::{
Deserialize,
Serialize,
};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum ProgressPhase {
Started,
Running,
Finished,
Failed,
Canceled,
}
impl ProgressPhase {
#[inline]
pub const fn as_str(self) -> &'static str {
match self {
Self::Started => "started",
Self::Running => "running",
Self::Finished => "finished",
Self::Failed => "failed",
Self::Canceled => "canceled",
}
}
#[inline]
pub const fn is_terminal(self) -> bool {
matches!(self, Self::Finished | Self::Failed | Self::Canceled)
}
}
impl fmt::Display for ProgressPhase {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str(self.as_str())
}
}