sumtype 0.4.0

Generate zerocost anonymous sum types that implement common traits
Documentation
use sumtype::{sumtrait, sumtype};

#[allow(unused)]
struct Marker;

#[sumtrait(marker = Marker)]
trait MySumTrait: sumtype::traits::Clone {}

#[allow(unused)]
#[sumtype(MySumTrait)]
fn f1(a: bool) -> impl MySumTrait + Clone {
    #[derive(Clone)]
    struct S1;
    #[derive(Clone)]
    struct S2;
    impl MySumTrait for S1 {}
    impl MySumTrait for S2 {}
    if a {
        sumtype!(S1)
    } else {
        sumtype!(S2)
    }
}

#[sumtrait(marker = Marker)]
trait MyCopy: sumtype::traits::Copy {}

impl MyCopy for usize {}
impl MyCopy for i8 {}

#[allow(unused)]
#[sumtype(MyCopy)]
fn f2(a: bool) -> impl Copy {
    if a {
        sumtype!(1i8)
    } else {
        sumtype!(1usize)
    }
}