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 From<$flag_type> for $flag_value_type {
22 fn from(value: $flag_type) -> Self {
23 value.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 {
30 flag: flag as $flag_value_type,
31 }
32 }
33
34 pub const fn is_default(&self) -> bool {
35 self.flag == 0 as $flag_value_type
36 }
37
38 pub const fn has_flag(&self, flag: $flag_enum_type) -> bool {
39 (self.flag & flag as $flag_value_type) != 0
40 }
41
42 pub const fn set_flag(&self, flag: $flag_enum_type) -> $flag_type {
43 $flag_type {
44 flag: self.flag | flag as $flag_value_type,
45 }
46 }
47
48 pub const fn unset_flag(&self, flag: $flag_enum_type) -> $flag_type {
49 $flag_type {
50 flag: self.flag & !(flag as $flag_value_type),
51 }
52 }
53 }
54 };
55}