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),+ ]) => { ... };
}