macro_rules! dep_obj {
(
$(#[$attr:meta])* $vis:vis struct $name:ident
$(< $( $lt:tt $( : $clt:tt $(+ $dlt:tt )* )? ),+ $(,)?>)?
as $id:ty : $ty:ident {
$($(
$field:ident $delim:tt $field_ty:ty $(= $field_val:expr)?
),+ $(,)?)?
}
) => { ... };
(
@impl $builder:ident [$(#[$attr:meta])*] ($vis:vis) $name:ident as $id:ty : $ty:ident ;
[$($s:tt)*]
[$($p:tt)*]
[$($c:tt)*]
[$($l:tt)*]
[$field:ident : $field_ty:ty = $field_val:expr $(, $($other_fields:tt)+)?];
$([ $($g:tt)+ ], [ $($r:tt)+ ])?
) => { ... };
(
@impl $builder:ident [$(#[$attr:meta])*] ($vis:vis) $name:ident as $id:ty : $ty:ident ;
[$($s:tt)*]
[$($p:tt)*]
[$($c:tt)*]
[$($l:tt)*]
[$field:ident yield $field_ty:ty $(, $($other_fields:tt)+)?];
$([ $($g:tt)+ ], [ $($r:tt)+ ])?
) => { ... };
(
@impl $builder:ident [$(#[$attr:meta])*] ($vis:vis) $name:ident as $id:ty : $ty:ident ;
[$($s:tt)*] [$($p:tt)*] [$($c:tt)*] [$($l:tt)*] [];
$([ $($g:tt)+ ], [ $($r:tt)+ ])?
) => { ... };
}