whichever 0.7.1

Implements a trait for an enum by forwarding to whichever variant it holds
Documentation
#[whichever::dispatchable]
trait Value {
    fn value(&self) -> u8;
}

struct Left(u8);

impl Value for Left {
    fn value(&self) -> u8 {
        self.0
    }
}

impl Value for u8 {
    fn value(&self) -> u8 {
        *self
    }
}

#[whichever::dispatch(Value, from = false)]
enum Handmade {
    Left(Left),
}

impl From<Left> for Handmade {
    fn from(left: Left) -> Self {
        Handmade::Left(Left(left.0 + 100))
    }
}

#[whichever::dispatch(Value)]
enum Twice {
    First(u8),
    Second(u8),
}

impl From<u8> for Twice {
    fn from(value: u8) -> Self {
        Twice::Second(value)
    }
}

#[test]
fn generation_can_be_switched_off_and_skips_repeated_payloads() {
    assert_eq!(Handmade::from(Left(1)).value(), 101);
    assert!(matches!(Twice::from(3), Twice::Second(3)));
}