Crate builder_derive

Source
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);

Derive Macros§

Builder
Consumer