pub trait BitflagsExt { fn contains(self, other: Self) -> bool; fn not_contains(self, other: Self) -> bool; fn intersects(self, other: Self) -> bool; } macro_rules! num { ($ty:ident) => { impl BitflagsExt for $ty { fn contains(self, other: Self) -> bool { self & other == other } fn not_contains(self, other: Self) -> bool { self & other != other } fn intersects(self, other: Self) -> bool { self & other != 0 } } }; } num!(u8); num!(u16); num!(u32); num!(u64); num!(i8); num!(i16); num!(i32); num!(i64);