bauer 0.5.0

A derive macro for automatically generating builders
Documentation
#![allow(dead_code)]

macro_rules! tests {
    ($kind: literal in mod $module: ident $($unwrap: ident)?) => {
        mod $module {
            use bauer::Builder;

            #[derive(Debug, Builder, PartialEq)]
            #[builder(kind = $kind, prefix = "set_")]
            struct Foo {
                #[builder(default = "42")]
                field_a: u32,
                field_b: Option<char>,
                field_c: bool,
                #[builder(into)]
                field_d: String,
                #[builder(skip_prefix, rename = "add_e", repeat, repeat_n = 3..)]
                field_e: Vec<f64>,
            }

            #[test]
            fn it_works() {
                let f: Foo = Foo::builder()
                    .set_field_a(69)
                    .set_field_c(true)
                    .set_field_d("hello world")
                    .add_e(std::f64::consts::PI)
                    .add_e(std::f64::consts::TAU)
                    .add_e(2.72)
                    .build()
                    $(.$unwrap())?;

                assert_eq!(f.field_a, 69);
                assert_eq!(f.field_b, None);
                assert_eq!(f.field_c, true);
                assert_eq!(f.field_d, "hello world");
                assert_eq!(f.field_e, [std::f64::consts::PI, std::f64::consts::TAU, 2.72]);
            }
        }
    };
}

tests!("borrowed" in mod borrowed unwrap);
tests!("owned" in mod owned unwrap);
tests!("type-state" in mod type_state);