1#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
6pub enum RegfVersion {
7 V1_0,
9 V1_3,
11 V1_4,
13 V1_5,
15 V1_6,
17}
18
19impl RegfVersion {
20 pub fn from_minor(minor: u32) -> Option<Self> {
22 match minor {
23 0..=2 => Some(Self::V1_0),
24 3 => Some(Self::V1_3),
25 4 => Some(Self::V1_4),
26 5 => Some(Self::V1_5),
27 6 => Some(Self::V1_6),
28 _ => None,
29 }
30 }
31
32 pub fn has_hash_leaf(self) -> bool {
34 self >= Self::V1_5
35 }
36
37 pub fn has_big_data(self) -> bool {
39 self >= Self::V1_4
40 }
41
42 pub fn has_fast_leaf(self) -> bool {
44 self >= Self::V1_3
45 }
46
47 pub fn has_layered_keys(self) -> bool {
49 self >= Self::V1_6
50 }
51}
52
53#[cfg(test)]
54mod tests {
55 use super::*;
56
57 #[test]
58 fn version_from_minor() {
59 assert_eq!(RegfVersion::from_minor(0), Some(RegfVersion::V1_0));
60 assert_eq!(RegfVersion::from_minor(2), Some(RegfVersion::V1_0));
61 assert_eq!(RegfVersion::from_minor(3), Some(RegfVersion::V1_3));
62 assert_eq!(RegfVersion::from_minor(5), Some(RegfVersion::V1_5));
63 assert_eq!(RegfVersion::from_minor(6), Some(RegfVersion::V1_6));
64 assert_eq!(RegfVersion::from_minor(99), None);
65 }
66
67 #[test]
68 fn version_feature_gates() {
69 assert!(!RegfVersion::V1_0.has_fast_leaf());
70 assert!(RegfVersion::V1_3.has_fast_leaf());
71 assert!(!RegfVersion::V1_3.has_big_data());
72 assert!(RegfVersion::V1_4.has_big_data());
73 assert!(!RegfVersion::V1_4.has_hash_leaf());
74 assert!(RegfVersion::V1_5.has_hash_leaf());
75 assert!(RegfVersion::V1_6.has_layered_keys());
76 }
77
78 #[test]
79 fn versions_are_ordered() {
80 assert!(RegfVersion::V1_0 < RegfVersion::V1_3);
81 assert!(RegfVersion::V1_3 < RegfVersion::V1_5);
82 assert!(RegfVersion::V1_5 < RegfVersion::V1_6);
83 }
84}