use macro_rules_attribute::derive;
use mini_macro_magic::export;
macro_rules! variant_name {
{{
$(#[$($attr:tt)*])*
$vis:vis enum $name:ident {
$($variant:ident($($stuff:tt)*)),*$(,)?
}
} $e:expr} => {
match $e {
$($name::$variant {..} => stringify!($variant)),*
}
};
}
#[derive(export!)]
#[custom(export(my_enum$))]
pub enum MyEnum {
A(i32),
B(String),
C(bool),
}
#[test]
fn check_variant() {
let x = MyEnum::A(1);
assert_eq!(my_enum!(variant_name!(x)), "A");
let x = MyEnum::B("a".into());
assert_eq!(my_enum!(variant_name!(x)), "B");
let x = MyEnum::C(true);
assert_eq!(my_enum!(variant_name!(x)), "C");
}