use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum Priority {
H,
M,
L,
}
impl Priority {
pub fn urgency_coefficient(&self) -> f64 {
match self {
Priority::H => 6.0,
Priority::M => 3.9,
Priority::L => 1.8,
}
}
pub fn label(&self) -> &str {
match self {
Priority::H => "H",
Priority::M => "M",
Priority::L => "L",
}
}
}
impl std::fmt::Display for Priority {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.label())
}
}
impl std::str::FromStr for Priority {
type Err = anyhow::Error;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s.to_uppercase().as_str() {
"H" | "HIGH" => Ok(Priority::H),
"M" | "MED" | "MEDIUM" => Ok(Priority::M),
"L" | "LOW" => Ok(Priority::L),
_ => Err(anyhow::anyhow!("Unknown priority: {s}")),
}
}
}