extract-variant 1.0.0

Destructure expressions into, and return assignments from, a single pattern.
Documentation
use std::error::Error;
use variant::try_variant;

enum Test {
    A(u8),
    B(bool),
}

fn main() {
    let val_a = Test::A(1);
    let a = try_variant!(val_a, Test::A(a)).expect("a");
    assert_eq!(a, 1);

    let a_err = try_variant!(val_a, Test::B(_));
    assert!(a_err.is_err());

    let val_b = Test::B(true);
    let err = Box::<dyn Error>::from("err");
    let b = try_variant!(val_b, Test::B(b), err).expect("b");
    assert_eq!(b, true);

    let err_closure = || Box::<dyn Error>::from("err");
    let b_err = try_variant!(val_b, Test::A(_), else err_closure);
    assert!(b_err.is_err());
}