use crate::flag::Flag;
pub struct EnumFlagContainer {
value: u8,
}
impl Flag for EnumFlagContainer {
type Value = EnumFlag;
fn set_flag(&mut self, flag: Self::Value) {
self.value |= flag as u8;
}
fn check_flag(&self, flag: Self::Value) -> bool {
(self.value & (flag as u8)) != 0
}
fn clear_flag(&mut self, flag: Self::Value) {
self.value &= !(flag as u8);
}
fn toggle_flag(&mut self, flag: Self::Value) {
self.value ^= flag as u8;
}
fn get_flags(&self) -> Self::Value {
panic!("Ambiguous return: multiple flags may be set in the underlying u8.");
}
fn set_flags(&mut self, value: Self::Value) {
self.value = value as u8;
}
}
#[repr(u8)]
#[derive(Clone, Copy, Debug)]
pub enum EnumFlag {
Flag1 = 0b0001,
Flag2 = 0b0010,
Flag3 = 0b0100,
Flag4 = 0b1000,
}