#![allow(unused_macros)]
macro_rules! build {
($t:path { $($body:tt)* }) => {{
let mut m = <$t>::default();
build!(@set m; $($body)*);
m
}};
(from $b:expr; $($body:tt)*) => {{
let mut m = $b;
build!(@set m; $($body)*);
m
}};
(@set $m:ident;) => {};
(@set $m:ident; $f:ident : $v:expr, $($rest:tt)*) => {
$m.$f = $v;
build!(@set $m; $($rest)*);
};
(@set $m:ident; $f:ident : $v:expr) => {
$m.$f = $v;
};
(@set $m:ident; $f:ident, $($rest:tt)*) => {
$m.$f = $f;
build!(@set $m; $($rest)*);
};
(@set $m:ident; $f:ident) => {
$m.$f = $f;
};
}