bitflags
generates flags enums with well-defined semantics and ergonomic end-user APIs.
You can usebitflags
to:
You can't usebitflags
to:
guarantee only bits corresponding to defined flags will ever be set.bitflags
allows access to the underlying bits type so arbitrary bits may be set.
define bitfields.bitflags
only generates types where set bits denote the presence of some combination of flags.
Add this to yourCargo.toml
:
[dependencies]bitflags="2.9.0"
and this to your source code:
usebitflags::bitflags;
Generate a flags structure:
usebitflags::bitflags;// The `bitflags!` macro generates `struct`s that manage a set of flags.bitflags!{/// Represents a set of flags.#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]structFlags: u32{/// The value `A`, at bit position `0`. const A = 0b00000001;/// The value `B`, at bit position `1`. const B = 0b00000010;/// The value `C`, at bit position `2`. const C = 0b00000100;/// The combination of `A`, `B`, and `C`. const ABC =Self::A.bits() |Self::B.bits() |Self::C.bits();}}fnmain(){let e1=Flags::A|Flags::C;let e2=Flags::B|Flags::C;assert_eq!((e1| e2),Flags::ABC);// unionassert_eq!((e1& e2),Flags::C);// intersectionassert_eq!((e1- e2),Flags::A);// set differenceassert_eq!(!e2,Flags::A);// set complement}
The minimum supported Rust version is documented in theCargo.toml
file.This may be bumped in minor releases as necessary.