unity-native-plugin 0.8.0

Unity Native Plugin API for Rust
Documentation
#[macro_export]
macro_rules! bitflag {
    ($flag_type:ident, $flag_enum_type:ty, $flag_value_type:ty) => {
        #[derive(Copy, Clone, Debug)]
        pub struct $flag_type {
            pub flag: $flag_value_type,
        }

        impl From<$flag_enum_type> for $flag_type {
            fn from(value: $flag_enum_type) -> Self {
                $flag_type::new(value)
            }
        }
        
        impl From<$flag_value_type> for $flag_type {
            fn from(value: $flag_value_type) -> Self {
                $flag_type { flag: value }
            }
        }
        
        impl Into<$flag_value_type> for $flag_type {
            fn into(self) -> $flag_value_type {
                self.flag as $flag_value_type
            }
        }
        
        impl $flag_type {
            pub fn new(flag: $flag_enum_type) -> $flag_type {
                $flag_type { flag: flag as $flag_value_type }
            }
        
            pub const fn is_default(&self) -> bool {
                self.flag == 0 as $flag_value_type
            }
        
            pub const fn has_flag(&self, flag: $flag_enum_type) -> bool {
                (self.flag & flag as $flag_value_type) != 0
            }
        
            pub const fn set_flag(&self, flag: $flag_enum_type) -> $flag_type {
                $flag_type {
                    flag: self.flag | flag as $flag_value_type,
                }
            }
        
            pub const fn unset_flag(&self, flag: $flag_enum_type) -> $flag_type {
                $flag_type {
                    flag: self.flag & !(flag as $flag_value_type),
                }
            }
        }
    };
}