static-dispatch 0.3.0

Implement a trait for an enum, where all variants implement the trait
Documentation
#[static_dispatch::setup]
trait ImplicitSelfBehavior {
    fn as_value(self);
    fn as_ref(&self);
    fn as_mut(&mut self);
}

struct A;
impl ImplicitSelfBehavior for A {
    fn as_value(self) {}
    fn as_ref(&self) {}
    fn as_mut(&mut self) {}
}

struct B;
impl ImplicitSelfBehavior for B {
    fn as_value(self: Self) {}
    fn as_ref(self: &Self) {}
    fn as_mut(self: &mut Self) {}
}

#[static_dispatch::setup]
enum ImplicitSelf {
    A(A),
    B(B),
}

static_dispatch::implementation!(ImplicitSelfBehavior for ImplicitSelf);

#[test]
fn implicit_self() {
    let mut value = ImplicitSelf::A(A);
    value.as_mut();
    value.as_ref();
    value.as_value();
    value = ImplicitSelf::B(B);
    value.as_mut();
    value.as_ref();
    value.as_value();
}