macro_rules! enum_unwrap {
    ($ex: expr, $Enum: path $(,)*) => { ... };
    ($ex: expr, $Enum: path :( $Cons: path :(_) ) $(,)*) => { ... };
    ($ex: expr, $Enum: path :( $Cons: path :( $Cons2: path :(_) ) ) $(,)*) => { ... };
    ($ex: expr, $Enum: path {$($fields: ident $(,)*)*}) => { ... };
}
Expand description

2重のunwrapまでサポート :は制限を回避するためのdummy token

let i: IntObj = enum_unwrap!(obj, Obj::Int);
let i: i32 = enum_unwrap!(obj, Obj::Int:(IntObj:(_)));