macro derive_builder! { struct $name:ident { $($field:ident : $ty:ty),* } => { @{ let builder_name = format_ident!("{}_Builder", name.to_string()); } T~{ pub struct ${ builder_name } { for field in $fields => pub $field.name: Option<$field.ty>, } impl ${ builder_name } { pub fn build(self) -> $name { $name { for field in $fields => $field.name: self.$field.name.unwrap(), } } } } } }