Вы можете сопоставить Foo::A
, используя Foo::$variant:ident
, чтобы получить A
как $variant
, например:
macro_rules! convert_foo_to_bar {
($v: ty, Foo::$variant:ident) => (<$v>::$variant)
}
Игровая площадка
Если вы необходимо преобразовать переменную, вам нужно будет использовать обычную функцию, например эту:
fn convert_foo_to_bar(foo: Foo) -> Bar {
match foo {
Foo::A => Bar::A,
Foo::B => Bar::B,
// .. for all of your variants
}
}