flag_mast/
lib.rs

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