#[to_bitflags]Expand description
Converts a regular enum into a bitflags-compatible type using its variant values.
The #[to_bitflags] attribute macro transforms a plain Rust enum definition into a bitflags struct,
while keeping the original enum syntax intact. This is particularly useful when you want to use bitflags
functionality without switching to a bitflags! macro or changing enum semantics.
§Syntax
#[commonlibsse_ng_derive_internal::to_bitflags]
#[derive(Default)]
pub enum MyFlags {
A = 0b0001,
B = 0b0010,
C = 0b0100,
#[default] // Optional, sets the default bitflags (requires `#[derive(Default)]`)
None = 0,
}Optionally, you can specify the output type name using the fn_name parameter:
#[commonlibsse_ng_derive_internal::to_bitflags(fn_name = "MyFlagsBits")]
pub enum MyFlags {
A = 1,
B = 2,
}§Attributes
| Attribute | Type | Required | Description |
|---|---|---|---|
fn_name | &str | No | The name of the generated bitflags struct. Defaults to the enum name. |
§Features
- Automatically implements
bitflags!for the enum using its variant values. - Honors
#[default]on a variant if#[derive(Default)]is also used. - Avoids the need to rewrite your enum as a
bitflags!block. - Works with enums using
explicit discriminant values.
§Example
#[commonlibsse_ng_derive_internal::to_bitflags]
#[derive(Default)]
pub enum RenderFlags {
Alpha = 0b0001,
Depth = 0b0010,
Stencil = 0b0100,
#[default]
None = 0,
}
let flags = RenderFlags::ALPHA | RenderFlags::DEPTH;
assert!(flags.contains(RenderFlags::ALPHA));§Notes
- The macro expects all enum variants to have constant discriminant values (e.g., integers or const exprs).
- The original
enumis preserved in the output (i.e., not removed or renamed).
§Dependencies
#[derive(Default)]and#[default]can be used to control the default value of the generated flag struct.