use serde::{Deserialize, Serialize};
use std::cmp::Ordering;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum Priority {
Critical = 0,
High = 1,
Medium = 2,
Low = 3,
}
impl Priority {
pub fn from_str(s: &str) -> Option<Self> {
match s.to_lowercase().as_str() {
"critical" => Some(Priority::Critical),
"high" => Some(Priority::High),
"medium" => Some(Priority::Medium),
"low" => Some(Priority::Low),
_ => None,
}
}
pub fn as_str(&self) -> &'static str {
match self {
Priority::Critical => "critical",
Priority::High => "high",
Priority::Medium => "medium",
Priority::Low => "low",
}
}
pub fn icon(&self) -> &'static str {
match self {
Priority::Critical | Priority::High => "❌",
Priority::Medium => "⚠️",
Priority::Low => "💡",
}
}
}
impl Default for Priority {
fn default() -> Self {
Priority::Medium
}
}
impl PartialOrd for Priority {
fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
Some(self.cmp(other))
}
}
impl Ord for Priority {
fn cmp(&self, other: &Self) -> Ordering {
(*self as u8).cmp(&(*other as u8))
}
}
impl std::fmt::Display for Priority {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.as_str())
}
}