irontide_core/
file_priority.rs1use serde::{Deserialize, Serialize};
2
3#[derive(
8 Debug, Default, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize,
9)]
10#[repr(u8)]
11pub enum FilePriority {
12 Skip = 0,
14 Low = 1,
16 #[default]
18 Normal = 4,
19 High = 7,
21}
22
23impl From<u8> for FilePriority {
24 fn from(v: u8) -> Self {
25 match v {
26 0 => Self::Skip,
27 1 => Self::Low,
28 7 => Self::High,
29 _ => Self::Normal,
30 }
31 }
32}
33
34#[cfg(test)]
35mod tests {
36 use super::*;
37
38 #[test]
39 fn default_is_normal() {
40 assert_eq!(FilePriority::default(), FilePriority::Normal);
41 }
42
43 #[test]
44 fn ordering_skip_less_than_high() {
45 assert!(FilePriority::Skip < FilePriority::Low);
46 assert!(FilePriority::Low < FilePriority::Normal);
47 assert!(FilePriority::Normal < FilePriority::High);
48 }
49
50 #[test]
51 fn from_u8_known_values() {
52 assert_eq!(FilePriority::from(0), FilePriority::Skip);
53 assert_eq!(FilePriority::from(1), FilePriority::Low);
54 assert_eq!(FilePriority::from(4), FilePriority::Normal);
55 assert_eq!(FilePriority::from(7), FilePriority::High);
56 }
57
58 #[test]
59 fn from_u8_unknown_defaults_to_normal() {
60 assert_eq!(FilePriority::from(2), FilePriority::Normal);
61 assert_eq!(FilePriority::from(255), FilePriority::Normal);
62 }
63
64 #[test]
65 fn repr_u8_round_trip() {
66 let p = FilePriority::High;
67 let v = p as u8;
68 assert_eq!(v, 7);
69 assert_eq!(FilePriority::from(v), p);
70 }
71
72 #[test]
73 fn serde_round_trip() {
74 let p = FilePriority::Low;
75 let encoded = irontide_bencode::to_bytes(&p).unwrap();
76 let decoded: FilePriority = irontide_bencode::from_bytes(&encoded).unwrap();
77 assert_eq!(p, decoded);
78 }
79}