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);