Skip to main content

todo_tree_core/
priority.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord)]
4pub enum Priority {
5    Low,
6    Medium,
7    High,
8    Critical,
9}
10
11impl Priority {
12    pub fn from_tag(tag: &str) -> Self {
13        match tag.to_uppercase().as_str() {
14            "BUG" | "FIXME" | "ERROR" => Priority::Critical,
15            "HACK" | "WARN" | "WARNING" | "FIX" => Priority::High,
16            "TODO" | "WIP" | "MAYBE" => Priority::Medium,
17            "NOTE" | "XXX" | "INFO" | "DOCS" | "PERF" | "TEST" | "IDEA" => Priority::Low,
18            _ => Priority::Medium,
19        }
20    }
21
22    pub fn display_name(&self) -> &'static str {
23        match self {
24            Priority::Critical => "Critical",
25            Priority::High => "High",
26            Priority::Medium => "Medium",
27            Priority::Low => "Low",
28        }
29    }
30}
31
32impl std::fmt::Display for Priority {
33    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
34        write!(f, "{}", self.display_name())
35    }
36}