#![allow(clippy::disallowed_names)]
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, __y> FooBuilder<((i32,), __y, __z)>
where
for<'a> Foo: typed_builder::NextFieldDefault<(&'a i32, __y), Output = Option<i32>>,
for<'a> Foo: typed_builder::NextFieldDefault<(&'a i32, &'a Option<i32>, __z), Output = i32>,
{
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 });
}