6 releases (breaking)
0.5.0 | Aug 31, 2020 |
---|---|
0.4.0 | Aug 31, 2020 |
0.3.0 | Mar 15, 2019 |
0.2.0 | Dec 20, 2018 |
0.1.0 | Apr 6, 2018 |
#1718 in Rust patterns
3,451 downloads per month
Used in k8s-ares
10KB
203 lines
Trait Enum
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.
#[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);
}