| Crates.io | bitflags |
| lib.rs | bitflags |
| version | 2.9.4 |
| created_at | 2015-01-15 08:35:24.901276+00 |
| updated_at | 2025-09-02 06:12:03.750699+00 |
| description | A macro to generate structures which behave like bitflags. |
| homepage | https://github.com/bitflags/bitflags |
| repository | https://github.com/bitflags/bitflags |
| max_upload_size | |
| id | 793 |
| size | 223,500 |
bitflags generates flags enums with well-defined semantics and ergonomic end-user APIs.
You can use bitflags to:
You can't use bitflags 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 your Cargo.toml:
[dependencies]
bitflags = "2.9.4"
and this to your source code:
use bitflags::bitflags;
Generate a flags structure:
use bitflags::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)]
struct Flags: 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();
}
}
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
}
The bitflags library defines a few Cargo features that you can opt-in to:
std: Implement the Error trait on error types used by bitflags.serde: Support deriving serde traits on generated flags types.arbitrary: Support deriving arbitrary traits on generated flags types.bytemuck: Support deriving bytemuck traits on generated flags types.Also see bitflags_derive for other flags-aware traits.
The minimum supported Rust version is documented in the Cargo.toml file.
This may be bumped in minor releases as necessary.