Bitmask-Enum
A bitmask enum attribute macro.
A bitmask can have unsigned integer types, the default type is usize
.
Don't know how to document in proc-macro
crates so if you want see a better documentation run cargo doc --open
and select your Bitmask
enum.
#[bitmask] enum Bitmask { }
#[bitmask(u8)] enum Bitmask { }
Example
use bitmask_enum::bitmask;
#[bitmask(u8)]
enum Bitmask {
Flag1, Flag2, Flag3, }
const CONST_BM: Bitmask = Bitmask::Flag2.or(Bitmask::Flag3);
fn main() {
println!("{:#010b}", CONST_BM);
let bm = Bitmask::Flag1 | Bitmask::Flag3;
println!("{:#010b}", bm);
println!("{}", bm.contains(CONST_BM));
println!("{}", bm.contains_all(CONST_BM)); }
Custom Values
You can assign every flag a custom value.
use bitmask_enum::bitmask;
#[bitmask(u8)]
enum Bitmask {
Flag1 = 0b00010000,
Flag2 = 0b00000100,
Flag3 = 0b00000001,
Flag13_1 = 0b00010000 | 0b00000001,
Flag13_2 = Self::Flag1.or(Self::Flag3),
}
fn main() {
let bm = Bitmask::Flag1 | Bitmask::Flag3;
println!("{:#010b}", bm); println!("{}", bm == Bitmask::Flag13_1); println!("{}", bm == Bitmask::Flag13_2); }