tl;dr within a match
statement for an enum
with subvariants, how can I assign that subvariant to a variable?
Given these enum
s
enum MySubVariant {
A,
B,
C,
}
enum MyEnum {
X { variant: MySubVariant },
Y { variant: MySubVariant },
Z,
}
fn main() {
let x = MyEnum::X { variant: MySubVariant::A };
match x {
MyEnum::X { variant: MySubVariant::A }
| MyEnum::X { variant: MySubVariant::B }
| MyEnum::X { variant: MySubVariant::C }
| MyEnum::Y { variant: MySubVariant::A }
| MyEnum::Y { variant: MySubVariant::B }
| MyEnum::Y { variant: MySubVariant::C }
=> {
print!("the variant was ");
match x {
MyEnum::X { variant } | MyEnum::Y { variant } => {
match variant {
MySubVariant::A => println!("A"),
MySubVariant::B => println!("B"),
MySubVariant::C => println!("C"),
}
}
_ => unreachable!(),
}
}
MyEnum::Z => println!("Z"),
}
}
I would like to access the variant
subvariant within the match statement.
I would like to replace the second inner match
statement with a variable.
Here is contrived (and invalid) code I would like:
fn main() {
let x = MyEnum::X { variant: MySubVariant::A };
match x {
MyEnum::X { variant: MySubVariant::A } where v = variant
| MyEnum::X { variant: MySubVariant::B } where v = variant
| MyEnum::X { variant: MySubVariant::C } where v = variant
| MyEnum::Y { variant: MySubVariant::A } where v = variant
| MyEnum::Y { variant: MySubVariant::B } where v = variant
| MyEnum::Y { variant: MySubVariant::C } where v = variant
=> {
println!("the variant was {:?}", v);
}
MyEnum::Z => println!("Z"),
}
}
Notice the second inner match
statement was replaced variable v
with contrived code where v = variant
.
How can I simplify these match
statements to easily access the variant
subvariant?