pjson_rs/application/
shared.rs1#[derive(Debug, Clone, PartialEq)]
8pub enum AdjustmentUrgency {
9 Low,
10 Medium,
11 High,
12 Critical,
13}
14
15impl AdjustmentUrgency {
16 pub fn as_level(&self) -> u8 {
18 match self {
19 Self::Low => 1,
20 Self::Medium => 2,
21 Self::High => 3,
22 Self::Critical => 4,
23 }
24 }
25
26 pub fn is_immediate(&self) -> bool {
28 matches!(self, Self::High | Self::Critical)
29 }
30}
31
32impl PartialOrd for AdjustmentUrgency {
33 fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
34 Some(self.cmp(other))
35 }
36}
37
38impl Ord for AdjustmentUrgency {
39 fn cmp(&self, other: &Self) -> std::cmp::Ordering {
40 self.as_level().cmp(&other.as_level())
41 }
42}
43
44impl Eq for AdjustmentUrgency {}
45
46#[cfg(test)]
47mod tests {
48 use super::*;
49
50 #[test]
51 fn test_adjustment_urgency_as_level() {
52 assert_eq!(AdjustmentUrgency::Low.as_level(), 1);
53 assert_eq!(AdjustmentUrgency::Medium.as_level(), 2);
54 assert_eq!(AdjustmentUrgency::High.as_level(), 3);
55 assert_eq!(AdjustmentUrgency::Critical.as_level(), 4);
56 }
57
58 #[test]
59 fn test_adjustment_urgency_is_immediate() {
60 assert!(!AdjustmentUrgency::Low.is_immediate());
61 assert!(!AdjustmentUrgency::Medium.is_immediate());
62 assert!(AdjustmentUrgency::High.is_immediate());
63 assert!(AdjustmentUrgency::Critical.is_immediate());
64 }
65
66 #[test]
67 fn test_adjustment_urgency_ordering() {
68 assert!(AdjustmentUrgency::Low < AdjustmentUrgency::Medium);
69 assert!(AdjustmentUrgency::Medium < AdjustmentUrgency::High);
70 assert!(AdjustmentUrgency::High < AdjustmentUrgency::Critical);
71 }
72
73 #[test]
74 fn test_adjustment_urgency_equality() {
75 assert_eq!(AdjustmentUrgency::Low, AdjustmentUrgency::Low);
76 assert_eq!(AdjustmentUrgency::Critical, AdjustmentUrgency::Critical);
77 assert_ne!(AdjustmentUrgency::Low, AdjustmentUrgency::High);
78 }
79
80 #[test]
81 fn test_adjustment_urgency_partial_ord() {
82 assert_eq!(
83 AdjustmentUrgency::Low.partial_cmp(&AdjustmentUrgency::Medium),
84 Some(std::cmp::Ordering::Less)
85 );
86 assert_eq!(
87 AdjustmentUrgency::High.partial_cmp(&AdjustmentUrgency::High),
88 Some(std::cmp::Ordering::Equal)
89 );
90 assert_eq!(
91 AdjustmentUrgency::Critical.partial_cmp(&AdjustmentUrgency::Low),
92 Some(std::cmp::Ordering::Greater)
93 );
94 }
95
96 #[test]
97 fn test_adjustment_urgency_clone() {
98 let urgency = AdjustmentUrgency::High;
99 let cloned = urgency.clone();
100 assert_eq!(urgency, cloned);
101 }
102
103 #[test]
104 fn test_adjustment_urgency_debug() {
105 let urgency = AdjustmentUrgency::Medium;
106 let debug_str = format!("{:?}", urgency);
107 assert!(debug_str.contains("Medium"));
108 }
109}