1use bitflags::bitflags;
2bitflags!(
3 #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
5 pub struct Flags: i32 {
6 const USEVC = c_ares_sys::ARES_FLAG_USEVC;
9
10 const PRIMARY = c_ares_sys::ARES_FLAG_PRIMARY;
12
13 const IGNTC = c_ares_sys::ARES_FLAG_IGNTC;
16
17 const NORECURSE = c_ares_sys::ARES_FLAG_NORECURSE;
21
22 const STAYOPEN = c_ares_sys::ARES_FLAG_STAYOPEN;
24
25 const NOSEARCH = c_ares_sys::ARES_FLAG_NOSEARCH;
27
28 const NOALIASES = c_ares_sys::ARES_FLAG_NOALIASES;
31
32 const NOCHECKRESP = c_ares_sys::ARES_FLAG_NOCHECKRESP;
36
37 const EDNS = c_ares_sys::ARES_FLAG_EDNS;
40
41 const NO_DFLT_SVR = c_ares_sys::ARES_FLAG_NO_DFLT_SVR;
44
45 const DNS_0X20 = c_ares_sys::ARES_FLAG_DNS0x20;
49 }
50);
51
52#[cfg(test)]
53mod tests {
54 use super::*;
55 use std::collections::HashSet;
56
57 #[test]
58 fn empty() {
59 let flags = Flags::empty();
60 assert!(flags.is_empty());
61 }
62
63 #[test]
64 fn single() {
65 let flags = Flags::USEVC;
66 assert!(flags.contains(Flags::USEVC));
67 assert!(!flags.contains(Flags::PRIMARY));
68 }
69
70 #[test]
71 fn combine() {
72 let flags = Flags::USEVC | Flags::PRIMARY;
73 assert!(flags.contains(Flags::USEVC));
74 assert!(flags.contains(Flags::PRIMARY));
75 assert!(!flags.contains(Flags::IGNTC));
76 }
77
78 #[test]
79 fn all() {
80 let flags = Flags::all();
81 assert!(flags.contains(Flags::USEVC));
82 assert!(flags.contains(Flags::PRIMARY));
83 assert!(flags.contains(Flags::IGNTC));
84 assert!(flags.contains(Flags::NORECURSE));
85 assert!(flags.contains(Flags::STAYOPEN));
86 assert!(flags.contains(Flags::NOSEARCH));
87 assert!(flags.contains(Flags::NOALIASES));
88 assert!(flags.contains(Flags::NOCHECKRESP));
89 assert!(flags.contains(Flags::EDNS));
90 assert!(flags.contains(Flags::NO_DFLT_SVR));
91 assert!(flags.contains(Flags::DNS_0X20));
92 }
93
94 #[test]
95 fn remove() {
96 let mut flags = Flags::USEVC | Flags::PRIMARY;
97 flags.remove(Flags::USEVC);
98 assert!(!flags.contains(Flags::USEVC));
99 assert!(flags.contains(Flags::PRIMARY));
100 }
101
102 #[test]
103 fn insert() {
104 let mut flags = Flags::empty();
105 flags.insert(Flags::STAYOPEN);
106 assert!(flags.contains(Flags::STAYOPEN));
107 }
108
109 #[test]
110 fn toggle() {
111 let mut flags = Flags::USEVC;
112 flags.toggle(Flags::USEVC);
113 assert!(!flags.contains(Flags::USEVC));
114 flags.toggle(Flags::USEVC);
115 assert!(flags.contains(Flags::USEVC));
116 }
117
118 #[test]
119 fn debug() {
120 let flags = Flags::USEVC | Flags::PRIMARY;
121 let debug = format!("{flags:?}");
122 assert!(debug.contains("USEVC"));
123 assert!(debug.contains("PRIMARY"));
124 }
125
126 #[test]
127 #[allow(clippy::clone_on_copy)]
128 fn clone_eq_hash() {
129 let flags = Flags::USEVC | Flags::PRIMARY;
130 let cloned = flags.clone();
131 assert_eq!(flags, cloned);
132
133 let mut set = HashSet::new();
134 set.insert(flags);
135 set.insert(cloned);
136 assert_eq!(set.len(), 1);
137 }
138}