1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
#[macro_export] macro_rules! hierarchy { { child<$super:ident> enum $name:ident { $($item:ident, )* } } => { #[derive(Clone, Debug, PartialEq)] pub enum $name { $($item($item), )* } $( impl From<$item> for $name { fn from(item: $item) -> $name { $name::$item(item) } } impl From<$item> for $super { fn from(item: $item) -> $super { $name::from(item).into() } } )* }; { enum $name:ident { $($item:ident, )* } } => { #[derive(Clone, Debug, PartialEq)] pub enum $name { $($item($item), )* } $( impl From<$item> for $name { fn from(item: $item) -> $name { $name::$item(item) } } )* } }