enumtrait 1.0.0

A library of macros for polymorphism using enums
Documentation
#![allow(unused_variables)]

struct Foo;
struct Cool<'a, A> {
    inner: &'a A,
}
struct Bar;

#[enumtrait::quick_enum]
#[enumtrait::store(poly_enum)]
enum Poly<'a, T> {
    Foo,
    Bar,
    Alias(Foo),
    Outer(Cool<'a, T>),
}

#[enumtrait::store(poly_trait)]
trait PolyTrait<'x, 'y, Z> {
    fn bing(self, a: i32) -> &'x Z;
    fn bong<B>(&mut self, b: Z) -> &'y B;
}

impl <'x, 'y, Z> PolyTrait<'x, 'y, Z> for Foo {
    fn bing(self, a: i32) -> &'x Z {
        unimplemented!()
    }
    fn bong<B>(&mut self, b: Z) -> &'y B {
        unimplemented!()
    }
}

impl <'x, 'y, Z> PolyTrait<'x, 'y, Z> for Bar {
    fn bing(self, a: i32) -> &'x Z {
        unimplemented!()
    }
    fn bong<B>(&mut self, b: Z) -> &'y B {
        unimplemented!()
    }
}

impl <'a, 'x, 'y, A, Z> PolyTrait<'x, 'y, Z> for Cool<'a, A> {
    fn bing(self, a: i32) -> &'x Z {
        unimplemented!()
    }
    fn bong<B>(&mut self, b: Z) -> &'y B {
        unimplemented!()
    }
}

#[enumtrait::impl_trait(poly_trait for poly_enum)]
impl<'x, 'y, Z> PolyTrait<'x, 'y, Z> for Poly<'y, Z> {}

fn main() {}