macro_rules! delegate_compositor { ($(@<$( $lt:tt $( : $clt:tt $(+ $dlt:tt )* )? ),+>)? $ty: ty) => { ... }; ($(@<$( $lt:tt $( : $clt:tt $(+ $dlt:tt )* )? ),+>)? $ty: ty, surface: [$($surface: ty),*$(,)?]) => { ... }; (@{$($ty:tt)*}; surface: []) => { ... }; (@{$($ty:tt)*}; surface-only: $surface:ty) => { ... }; (@$ty:tt; surface: [ $($surface:ty),+ ]) => { ... }; }