MCPcopy Index your code
hub / github.com/bitflags/bitflags

github.com/bitflags/bitflags @2.13.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release 2.13.0 ↗ · + Follow
275 symbols 486 edges 106 files 57 documented · 21%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

bitflags

Rust Latest version Documentation License

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. 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.

  • Documentation

  • Specification
  • Release notes

Usage

Add this to your Cargo.toml:

[dependencies]
bitflags = "2.13.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 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.

Rust Version Support

The minimum supported Rust version is documented in the Cargo.toml file. This may be bumped in minor releases as necessary.

Extension points exported contracts — how you extend this code

Flags (Interface)
A set of defined flags using a bits type as storage. ## Implementing `Flags` This trait is implemented by the [`bitfla [2 …
src/traits.rs
WriteHex (Interface)
Encode a value as a hex string. Implementors of this trait should not write the `0x` prefix. */ [1 implementers]
src/parser.rs
MyCustomFlagsTrait (Interface)
(no doc) [1 implementers]
tests/compile-pass/flags_trait_bound_bitflags.rs
Bits (Interface)
A bits type that can be used as storage for a flags type. */ [2 implementers]
src/traits.rs
ParseHex (Interface)
Parse a value from a hex string. */ [1 implementers]
src/parser.rs
MyCustomFlagsTrait (Interface)
(no doc) [1 implementers]
tests/compile-pass/bitflags_trait_bound_flags.rs
Primitive (Interface)
Not re-exported: prevent custom `Bits` impls being used in the `bitflags!` macro, or they may fail to compile based on c
src/traits.rs
BitFlagsExt (Interface)
(no doc) [1 implementers]
tests/compile-pass/bitflags_trait_supertrait.rs

Core symbols most depended-on inside this repo

bits
called by 52
examples/macro_free.rs
iter
called by 17
src/traits.rs
is_empty
called by 13
src/traits.rs
value
called by 9
src/traits.rs
name
called by 8
src/traits.rs
to_writer
called by 7
src/parser.rs
clear
called by 4
src/traits.rs
from_str
called by 4
src/parser.rs

Shape

Function 163
Method 78
Class 21
Interface 12
Enum 1

Languages

Rust100%

Modules by API surface

src/traits.rs40 symbols
src/parser.rs15 symbols
tests/compile-fail/bitflags_custom_bits.rs12 symbols
examples/custom_bits_type.rs10 symbols
benches/parse.rs9 symbols
src/iter.rs8 symbols
src/tests/parser.rs7 symbols
src/tests/bitflags_match.rs7 symbols
src/external/serde.rs6 symbols
examples/macro_free.rs6 symbols
tests/compile-pass/flags_trait_supertrait.rs5 symbols
tests/compile-pass/bitflags_trait_to_flags.rs5 symbols

For agents

$ claude mcp add bitflags \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact