| bitflags |
| ======== |
| |
| [](https://github.com/bitflags/bitflags/actions) |
| [](https://crates.io/crates/bitflags) |
| [](https://docs.rs/bitflags) |
|  |
| |
| A Rust macro to generate structures which behave like a set of bitflags |
| |
| - [Documentation](https://docs.rs/bitflags) |
| - [Release notes](https://github.com/bitflags/bitflags/releases) |
| |
| ## Usage |
| |
| Add this to your `Cargo.toml`: |
| |
| ```toml |
| [dependencies] |
| bitflags = "2.3.2" |
| ``` |
| |
| and this to your source code: |
| |
| ```rust |
| use bitflags::bitflags; |
| ``` |
| |
| ## Example |
| |
| Generate a flags structure: |
| |
| ```rust |
| use bitflags::bitflags; |
| |
| // The `bitflags!` macro generates `struct`s that manage a set of flags. |
| bitflags! { |
| #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] |
| struct Flags: u32 { |
| const A = 0b00000001; |
| const B = 0b00000010; |
| const C = 0b00000100; |
| const ABC = Self::A.bits() | Self::B.bits() | Self::C.bits(); |
| } |
| } |
| |
| fn main() { |
| let e1 = Flags::A | Flags::C; |
| let e2 = Flags::B | Flags::C; |
| assert_eq!((e1 | e2), Flags::ABC); // union |
| assert_eq!((e1 & e2), Flags::C); // intersection |
| assert_eq!((e1 - e2), Flags::A); // set difference |
| assert_eq!(!e2, Flags::A); // set complement |
| } |
| ``` |
| |
| ## Rust Version Support |
| |
| The minimum supported Rust version is documented in the `Cargo.toml` file. |
| This may be bumped in minor releases as necessary. |