Attribute Macro auto_enum::enum_flags
source · #[enum_flags]Expand description
Generates a bitflag wrapper struct containing the specified representation type. Representation defaults to u32.
Additional parameters
#[enum_flags({representation})]
{representation} may be any unsigned integral type from 8 to 64 (including usize).
It defaults to u32 if unspecified.
Basic usage
#[enum_flags]
pub enum Foo {
BAR = 0b001, // These flag values are the ones that would be
BAZ = 0b010, // assigned automatically by the macro if they
QUX = 0b100, // were not specified explicitly.
NONE = 0,
ALL = BAR | BAZ | QUX,
}
let mut flags = Foo::NONE;
assert_eq!(flags.is_set(Foo::BAR), false);
assert_eq!(flags.is_set(Foo::BAZ), false);
assert_eq!(flags.is_set(Foo::QUX), false);
flags |= Foo::BAR | Foo::QUX;
assert_eq!(flags.is_set(Foo::BAR), true);
assert_eq!(flags.is_set(Foo::BAZ), false);
assert_eq!(flags.is_set(Foo::QUX), true);
flags ^= Foo::BAR | Foo::BAZ;
assert_eq!(flags.is_set(Foo::BAR), false);
assert_eq!(flags.is_set(Foo::BAZ), true);
assert_eq!(flags.is_set(Foo::QUX), true);
flags &= Foo::BAZ;
assert_eq!(flags.is_set(Foo::BAR), false);
assert_eq!(flags.is_set(Foo::BAZ), true);
assert_eq!(flags.is_set(Foo::QUX), false);
flags = !flags;
assert_eq!(flags.is_set(Foo::BAR), true);
assert_eq!(flags.is_set(Foo::BAZ), false);
assert_eq!(flags.is_set(Foo::QUX), true);
flags |= Foo::ALL;
assert_eq!(flags.is_set(Foo::BAR), true);
assert_eq!(flags.is_set(Foo::BAZ), true);
assert_eq!(flags.is_set(Foo::QUX), true);
flags.clear(Foo::ALL);
assert_eq!(flags.is_set(Foo::BAR), false);
assert_eq!(flags.is_set(Foo::BAZ), false);
assert_eq!(flags.is_set(Foo::QUX), false);