Builder

Derive Macro Builder 

Source
#[derive(Builder)]
{
    // Attributes available to this derive:
    #[builder_attr]
    #[builder_field]
}
Expand description

Derives a builder pattern for the struct.

§Container Attribute: #[builder_attr(...)]
  • name = "BuilderName": Renames the generated builder struct.
  • build_by = "value" | "reference": Chooses between value-consuming or reference-based build method.
  • opt_in: Requires fields to be explicitly marked with #[builder_field(include = true)].
§Field Attribute: #[builder_field(...)]
  • name = "method_name": Renames the generated builder method for this field.
  • include = true | false: Controls whether the field is included in the builder (overrides opt_in).

§Example

#[derive(Builder)]
#[builder_attr(build_by = "reference", opt_in)]
struct User {
    #[builder_field(name = "set_name", include = true)]
    name: String,
    password: String,
}

To be included in the builder pattern, a field must implement the Default trait. Fields not included in the builder must be explicitly provided as arguments to the final build method.

#[derive(Builder)]
#[builder_attr(name = "PersonMaker")]
struct Person{
    weight: f32,
    age: u16,
    name: &'static str,
 
    #[builder_field(include = false)]
    callback: fn(i32) -> i32,
}
 
let person = Person::builder()
    .age(37)
    .weight(72.45)
    .name("Tenma")
    .build(|num| num + 5);
 
assert_eq!(person.age, 37);
assert_eq!(person.weight, 72.45);
assert_eq!(person.name, "Tenma");
assert_eq!((person.callback)(5), 10);