Attribute Macro generate_builder

Source
#[generate_builder]
Expand description

Generate Builder struct, implementation for Builder struct, Builder trait implementation for Builder struct from provided struct

  • Generated Builder name will be XXXBuilder.
  • use with_xxx method to set value.
  • use build method to get Option<provided struct> .
  • #[generate_builder(Traits)] Traits will be derived to Builder struct by #[derive(Traits)]
  • if there is data has not been set, build method returns None
  • generated struct field will be provided_field_name: Option<provided_field_type>

§Examples

use patternize::builder::generate_builder;

#[derive(Debug, PartialEq)] // for assert_eq!
#[generate_builder(Clone)]
struct Example {
    data1: usize,
    data2: isize
}

fn main() {
    let example_builder: ExampleBuilder = ExampleBuilder::new()
    .with_data1(0);
     
    assert_eq!(example_builder.clone().build(), None);
     
    let example: Option<Example> = example_builder.with_data2(-1).build();
     
    assert_eq!(example, Some(Example { data1: 0, data2: -1 }));
}

§Generation Image

#[generate_builder(Debug, Clone)]
struct Example {
    data: T
    ...
}

// after generate
#[derive(Debug, Clone)]
struct ExampleBuilder {
    data: Option<T>
    ...
}

impl ExampleBuilder {
    fn new() -> Self;
    fn build(self) -> Example;
    fn with_data(self, T) -> Self;
    ...
}

impl patternize::builder::Builder for ExampleBuilder;