mod scope {
use typed_builder::TypedBuilder;
#[derive(Debug, PartialEq, TypedBuilder)]
#[builder(build_method(vis="", name=__build))]
pub struct Foo {
x: i32,
#[builder(default, setter(strip_option))]
y: Option<i32>,
#[builder(default = 20)]
z: i32,
}
#[allow(non_camel_case_types)]
impl<__z: typed_builder::Optional<i32>, __y: typed_builder::Optional<Option<i32>>> FooBuilder<((i32,), __y, __z)> {
pub fn build(self) -> Bar {
let foo = self.__build();
Bar {
x: foo.x + 1,
y: foo.y.map(|y| y + 1),
z: foo.z + 1,
}
}
}
#[derive(Debug, PartialEq)]
pub struct Bar {
pub x: i32,
pub y: Option<i32>,
pub z: i32,
}
}
use scope::{Bar, Foo};
fn main() {
assert_eq!(Foo::builder().x(1).y(2).z(3).build(), Bar { x: 2, y: Some(3), z: 4 });
}