[][src]Macro tari_test_utils::unpack_enum

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) => { ... };
}

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);