Skip to main content

BitsBuilder

Derive Macro BitsBuilder 

Source
#[derive(BitsBuilder)]
{
    // Attributes available to this derive:
    #[builder]
}
Expand description

Generates a derive_builder-style builder for a struct (or, when listed in a #[bitfield]’s derives, for the bitfield — intercepted by #[bitfield]).

#[bitfield(u16, bits = msb)]
#[derive(BitsBuilder, Clone, Copy)]
struct State {
    opcode: u4,            // required
    #[builder(default)]    // optional; 0 if unset
    flags: u8,
    rcode: RCode,          // required
}

let s = State::builder().opcode(u4::new(2)).rcode(RCode::ServFail).build()?;

Generates Foo::builder() -> FooBuilder, an Option-tracked setter per field, and build() -> Result<Foo, bnb::BuilderError> that errors on the first unset required field. A field is optional only with #[builder(default)] (Default::default() if unset) or #[builder(default = expr)]. Coexists with the infallible infix with_*.

On a #[bitfield] struct, list #[bitfield(...)] above the #[derive] so it intercepts this marker.

See the bnb::guide::builders page for runnable examples (required-field errors, default/default = expr, the #[bitfield] intercept).