#[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 (overridesopt_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);