Trait Enum

Build Status

An enum wrapper for types that implement the same trait

The trait_enum macro generates an enum that manages several objects.

These objects are expected to have the same trait impl

After which the enum will have a std::ops::Deref impl which returns a reference to that trait.

``` rust

[macro_use]

extern crate trait_enum;

pub trait CommonTrait { fn test(&self) -> u32; }

pub struct InnerOne; impl CommonTrait for InnerOne { fn test(&self) -> u32 { 1 } }

pub struct InnerTwo; impl CommonTrait for InnerTwo { fn test(&self) -> u32 { 2 } }

trait_enum!{ pub enum Combined: CommonTrait { InnerOne, InnerTwo, } }

fn main() { use std::ops::Deref;

let combined = Combined::InnerOne(InnerOne);
let deref: &dyn CommonTrait = combined.deref();
assert_eq!(deref.test(), 1);

let combined = Combined::InnerTwo(InnerTwo);
let deref: &dyn CommonTrait = combined.deref();
assert_eq!(deref.test(), 2);

} ```