Bitflags
A macro to generate structures which behave like bitflags
Install / Use
/learn @bitflags/BitflagsREADME
bitflags
bitflags generates flags enums with well-defined semantics and ergonomic end-user APIs.
You can use bitflags to:
- provide more user-friendly bindings to C APIs where flags may or may not be fully known in advance.
- generate efficient options types with string parsing and formatting support.
You can't use bitflags to:
-
guarantee only bits corresponding to defined flags will ever be set.
bitflagsallows access to the underlying bits type so arbitrary bits may be set. -
define bitfields.
bitflagsonly generates types where set bits denote the presence of some combination of flags.
Usage
Add this to your Cargo.toml:
[dependencies]
bitflags = "2.11.0"
and this to your source code:
use bitflags::bitflags;
Example
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
}
Cargo features
The bitflags library defines a few Cargo features that you can opt-in to:
std: Implement theErrortrait on error types used bybitflags.serde: Support derivingserdetraits on generated flags types.arbitrary: Support derivingarbitrarytraits on generated flags types.bytemuck: Support derivingbytemucktraits on generated flags types.
Also see bitflags_derive for other flags-aware traits.
Rust Version Support
The minimum supported Rust version is documented in the Cargo.toml file.
This may be bumped in minor releases as necessary.
Related Skills
node-connect
341.8kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
84.6kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
341.8kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
84.6kCommit, push, and open a PR
