Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
bitflag-attr
This is a proc-macro Rust crate that allows to turn a C-like enum into a bitflag structures with an API similar to bitfields
crate.
You can use this crate to:
- provide more user-friendly bindings to C APIs where flags may or may not be fully known in advance.
You can't use this crate to:
- guarantee only bits corresponding to defined flags will ever be set.
bitflag-attr
allows access to the underlying bits type so arbitrary bits may be set. - define bitfields.
bitflag-attr
only generates types where set bits denote the presence of some combination of flags.
Implemented traits
The macro requires that Clone
and Copy
are derived.
The macro will also implement some traits for bitwise operations and formatting.
- core::ops::Not
- core::ops::BitAnd
- core::ops::BitOr
- core::ops::BitXor
- core::ops::BitAndAssign
- core::ops::BitOrAssign
- core::ops::BitXorAssign
- core::ops::Sub
- core::ops::SubAssign
- core::fmt::Debug (This can be opt-out with the
no_auto_debug
) - core::fmt::Binary
- core::fmt::UpperHex
- core::fmt::LowerHex
- core::fmt::Octal
- From
If the Debug
trait is defined in the #[derive(...)]
attribute. The macro will produce a custom implementation instead of the one Rust std produces
The macro also generate iterator types to iterate over the set flags, and for convenience also implement the following traits:
- core::iter::Extend
- core::iter::FromIterator
- core::iter::Iterator (for the type and reference)
There is a opt-in crate feature serde
that generate a parsing error type and implements the traits:
- core::str::FromStr
- serde::Serialize
- serde::Deserialize
The custom implementation for Serialize
and Deserialize
will be generated only if those traits are in the #[derive(...)]
attribute list (similar how the Debug
works).
Note: This crate does not import/re-export serde traits, your project MUST have serde
as dependency.
Example
Generate a flags structure:
use bitflag;
If you don't want Debug
trait to be generated, you can simply not define it on the derive attribute to the attribute.
use bitflag;
Rust Version Support
The minimum supported Rust version is documented in the Cargo.toml
file.
This may be bumped in minor releases as necessary.