1#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
11pub enum Put {
12 NoOverwrite,
17
18 Overwrite,
24
25 NoDupData,
31
32 Current,
37}
38
39impl Put {
40 pub fn allows_overwrite(&self) -> bool {
42 matches!(self, Put::Overwrite | Put::Current)
43 }
44
45 pub fn errors_if_exists(&self) -> bool {
47 matches!(self, Put::NoOverwrite)
48 }
49
50 pub fn requires_positioned_cursor(&self) -> bool {
52 matches!(self, Put::Current)
53 }
54
55 pub fn prevents_duplicates(&self) -> bool {
57 matches!(self, Put::NoDupData)
58 }
59}
60
61#[cfg(test)]
62mod tests {
63 use super::*;
64
65 #[test]
66 fn test_allows_overwrite() {
67 assert!(Put::Overwrite.allows_overwrite());
68 assert!(Put::Current.allows_overwrite());
69 assert!(!Put::NoOverwrite.allows_overwrite());
70 assert!(!Put::NoDupData.allows_overwrite());
71 }
72
73 #[test]
74 fn test_errors_if_exists() {
75 assert!(Put::NoOverwrite.errors_if_exists());
76 assert!(!Put::Overwrite.errors_if_exists());
77 assert!(!Put::NoDupData.errors_if_exists());
78 assert!(!Put::Current.errors_if_exists());
79 }
80
81 #[test]
82 fn test_requires_positioned_cursor() {
83 assert!(Put::Current.requires_positioned_cursor());
84 assert!(!Put::Overwrite.requires_positioned_cursor());
85 assert!(!Put::NoOverwrite.requires_positioned_cursor());
86 assert!(!Put::NoDupData.requires_positioned_cursor());
87 }
88
89 #[test]
90 fn test_prevents_duplicates() {
91 assert!(Put::NoDupData.prevents_duplicates());
92 assert!(!Put::Overwrite.prevents_duplicates());
93 assert!(!Put::NoOverwrite.prevents_duplicates());
94 assert!(!Put::Current.prevents_duplicates());
95 }
96
97 #[test]
98 fn test_equality() {
99 assert_eq!(Put::NoOverwrite, Put::NoOverwrite);
100 assert_ne!(Put::NoOverwrite, Put::Overwrite);
101 }
102
103 #[test]
104 fn test_clone() {
105 let put1 = Put::Current;
106 let put2 = put1;
107 assert_eq!(put1, put2);
108 }
109
110 #[test]
111 fn test_copy() {
112 let put1 = Put::Overwrite;
113 let put2 = put1;
114 assert_eq!(put1, put2);
115 }
116
117 #[test]
118 fn test_debug() {
119 let put = Put::NoDupData;
120 let debug = format!("{:?}", put);
121 assert_eq!(debug, "NoDupData");
122 }
123
124 #[test]
125 fn test_all_variants() {
126 let variants =
127 [Put::NoOverwrite, Put::Overwrite, Put::NoDupData, Put::Current];
128 assert_eq!(variants.len(), 4);
130 }
131}