#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct XaFlags(pub u32);
impl XaFlags {
pub const NOFLAGS: Self = Self(0x00000000);
pub const JOIN: Self = Self(0x00200000);
pub const RESUME: Self = Self(0x08000000);
pub const TMSUCCESS: Self = Self(0x04000000);
pub const TMFAIL: Self = Self(0x20000000);
pub const TMSUSPEND: Self = Self(0x02000000);
pub const ONEPHASE: Self = Self(0x40000000);
pub const STARTRSCAN: Self = Self(0x01000000);
pub const ENDRSCAN: Self = Self(0x00800000);
pub fn contains(self, flag: Self) -> bool {
(self.0 & flag.0) != 0
}
pub fn union(self, other: Self) -> Self {
Self(self.0 | other.0)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_no_flags() {
assert_eq!(XaFlags::NOFLAGS.0, 0);
assert!(!XaFlags::NOFLAGS.contains(XaFlags::JOIN));
}
#[test]
fn test_contains() {
let flags = XaFlags::TMSUCCESS.union(XaFlags::ONEPHASE);
assert!(flags.contains(XaFlags::TMSUCCESS));
assert!(flags.contains(XaFlags::ONEPHASE));
assert!(!flags.contains(XaFlags::TMFAIL));
}
}