macro_rules! trait_alias { ( $(#[$attr: meta])* $visibility: vis $name: ident$(<$($type_param: ident),*>)?$(: $first_bound: tt $(+ $bound: tt)*)?; ) => { $(#[$attr])* $visibility trait $name $(<$($type_param),*>)? $(: $first_bound $(+ $bound)*)? {} impl $name$(<$($type_param),*>)? for T {} }; } pub(crate) use trait_alias;