1pub use flag_mast_derive::*;
2
3#[cfg(test)]
4mod tests {
5 use super::*;
6
7 #[test]
8 fn it_works() {
9 #[derive(Flags, Default)]
10 #[flag_debug()]
11 #[flag(name = "BARKS", method_name = "can_bark", doc = "is a borky boi", value = 0x1)]
12 #[flag(name = "sits", value = 0x2)]
13 #[flag(name = "OBEDIENT", method_name = "is_obedient", value = 0x4)]
14 struct Dog(#[flag_backing_field] u32);
15
16 let mut dog = Dog::default();
17 dog.set_can_bark(true);
18 dog.set_sits(true);
19 assert!(dog.can_bark() == true);
20 }
21
22 const BLUE: u8 = 0x1;
23 const RED: u8 = 0x2;
24
25 mod secondary_colours {
26 pub const YELLOW: u16 = 0x4;
27 }
28
29 #[test]
30 fn it_works_two() {
31 #[derive(Flags, Default)]
32 #[flag_debug]
33 #[flag(name = "blue", value = "BLUE")]
34 #[flag(name = "red", value = "RED")]
35 #[flag(name = "yellow", value = "secondary_colours::YELLOW")]
36 #[flag(name = "purple", value = "BLUE | RED")]
37 #[flag(name = "black", value = 16)]
38 #[repr(C)]
39 struct Colour{
40 is_useful: bool,
41 #[flag_backing_field]
42 flags: u16
43 }
44
45
46 let mut colour = Colour::default();
47 colour.set_blue(true);
48 colour.set_red(true);
49
50 dbg!(&colour);
51 assert!(colour.purple());
52 }
53
54 #[test]
55 fn it_works_three() {
56 #[derive(Flags, Default)]
57 #[flag_debug(compact)]
58 #[flag(name = "one", value = 4)]
59 #[flag(name = "second", method_name = "two", value = 8)]
60 #[flag(name = "three", value = 16)]
61 struct Buttons(#[flag_backing_field] u16);
62
63 let mut buttons = Buttons::default();
64 buttons.set_one(true);
65 buttons.set_three(true);
66
67 println!("{:?}", buttons);
68 println!("---");
69 println!("{:#?}", buttons);
70 }
71
72}
73
74