Expand description
Defines a builder for the given struct.
§Limitations
This crate has no support for generic builders, this could be included in future versions.
§Examples
§Builder
use builder_derive::Builder;
#[derive(Builder)]
pub struct CoolStruct {
field_a: usize,
field_b: i32
}
let implementation = CoolStruct::builder().set_field_a(2).set_field_b(4).complete();
assert!(implementation.field_a == 2);
assert!(implementation.field_b == 4);
If any fields are not specified it will fail.
ⓘ
use builder_derive::Builder;
#[derive(Builder)]
pub struct CoolStruct {
field_a: usize,
field_b: i32
}
let implementation = CoolStruct::builder().set_field_a(2).complete();
§Consumer
The consumer pattern is a bit niche but it is useful if you have a bunch of autogenerated structs and want to be certain that you do not miss any cases.
use builder_derive::{Builder,Consumer};
#[derive(Builder,Consumer,PartialEq)]
pub struct CoolStruct {
field_a: usize,
field_b: i32
}
let implementation = CoolStruct::builder().set_field_a(2).set_field_b(4).complete();
assert!(implementation.field_a == 2);
assert!(implementation.field_b == 4);
let consumer = implementation.consumer();
let (field_a,consumer) = consumer.consume_field_a();
let (field_b,consumer) = consumer.consume_field_b();
consumer.consume();
assert!(field_a == 2);
assert!(field_b == 4);
If any fields are not consumed it will fail to compile.
ⓘ
use builder_derive::{Builder,Consumer};
#[derive(Builder,Consumer,PartialEq)]
pub struct CoolStruct {
field_a: usize,
field_b: i32
}
let implementation = CoolStruct::builder().set_field_a(2).set_field_b(4).complete();
assert!(implementation.field_a == 2);
assert!(implementation.field_b == 4);
let consumer = implementation.consumer();
let (field_a,consumer) = consumer.consume_field_a();
consumer.consume();
assert!(field_a == 2);