trait_alias_macro/
lib.rs

1#[doc(hidden)]
2#[macro_export]
3macro_rules! do_not_use {
4    ($($item:item)*) => ($($item)*);
5}
6
7#[macro_export]
8macro_rules! trait_alias_macro {
9    ($name:ident = $($base:tt)+) => {
10        ::trait_alias_macro::do_not_use! {
11            trait $name: $($base)+ { }
12            impl<T: $($base)+> $name for T { }
13        }
14    };
15}
16
17#[macro_export]
18macro_rules! pub_trait_alias_macro {
19    ($name:ident = $($base:tt)+) => {
20        ::trait_alias_macro::do_not_use! {
21            pub trait $name: $($base)+ { }
22            impl<T: $($base)+> $name for T { }
23        }
24    };
25}