macro_rules! unpack_enum {
($($enum_key:ident)::+ { .. } = $enum:expr) => { ... };
($($enum_key:ident)::+ { $($idents:tt),* } = $enum:expr) => { ... };
($($enum_key:ident)::+ ( $($idents:tt),* ) = $enum:expr) => { ... };
($($enum_key:ident)::+ = $enum:expr) => { ... };
}
Expand description
Unpack the tuple or struct from an enum variant. Each extracted variable is decalred as mutable for maximum flexibility.
ⓘ
#[derive(Debug)]
enum AnyEnum<'a> {
Tuple(u8, &'a str),
Struct { name: &'a str, age: u8 },
SingleVariant,
}
let e = AnyEnum::Tuple(123, "Hubert etc.");
unpack_enum!(AnyEnum::Tuple(age, name) = e);
assert_eq!(age, 123);
assert_eq!(name, "Hubert etc.");
let e = AnyEnum::Struct{age: 123, name: "Hubert etc."};
unpack_enum!(AnyEnum::Struct{ age, name } = e);
assert_eq!(age, 123);
assert_eq!(name, "Hubert etc.");
let e = AnyEnum::SingleVariant;
unpack_enum!(AnyEnum::SingleVariant = e);
// Will panic
// let e = AnyEnum::Tuple(123, "Hubert etc.");
// unpack_enum!(AnyEnum::SingleVariant = e);