unity_native_plugin/
bitflag.rs1#[macro_export]
2macro_rules! bitflag {
3 ($flag_type:ident, $flag_enum_type:ty, $flag_value_type:ty) => {
4 #[derive(Copy, Clone, Debug)]
5 pub struct $flag_type {
6 pub flag: $flag_value_type,
7 }
8
9 impl From<$flag_enum_type> for $flag_type {
10 fn from(value: $flag_enum_type) -> Self {
11 $flag_type::new(value)
12 }
13 }
14
15 impl From<$flag_value_type> for $flag_type {
16 fn from(value: $flag_value_type) -> Self {
17 $flag_type { flag: value }
18 }
19 }
20
21 impl Into<$flag_value_type> for $flag_type {
22 fn into(self) -> $flag_value_type {
23 self.flag as $flag_value_type
24 }
25 }
26
27 impl $flag_type {
28 pub fn new(flag: $flag_enum_type) -> $flag_type {
29 $flag_type { flag: flag as $flag_value_type }
30 }
31
32 pub const fn is_default(&self) -> bool {
33 self.flag == 0 as $flag_value_type
34 }
35
36 pub const fn has_flag(&self, flag: $flag_enum_type) -> bool {
37 (self.flag & flag as $flag_value_type) != 0
38 }
39
40 pub const fn set_flag(&self, flag: $flag_enum_type) -> $flag_type {
41 $flag_type {
42 flag: self.flag | flag as $flag_value_type,
43 }
44 }
45
46 pub const fn unset_flag(&self, flag: $flag_enum_type) -> $flag_type {
47 $flag_type {
48 flag: self.flag & !(flag as $flag_value_type),
49 }
50 }
51 }
52 };
53}