[][src]Macro union_type::union_type

union_type!() { /* proc-macro */ }

To make a enum a "union type" Assume there exists an A type and a B type, both of them has implemented fn f and g

union_type! {
    #[derive(Debug, Clone)]
    enum C {
        A,
        B
    }
    impl C {
        fn f(&self) -> i32;
        fn g<T: Display>(&self, t: T) -> String;
    }
}

Then type C becomes an union type, you can cast from and into C with A and B:

let a = A::new();
let mut c: C = a.into();
let b = c.try_into();               // cause an Err
let a: A = c.try_into().unwrap();   // successful

And will call its child type's function when:

let a = A::new();
let mut c: C = a.into();
c.f(); // equivalent with call a.f()
let b = B::new();
c = b.into();
c.f(); // equivalent with call b.f()