JelteF / derive_more

Some more derive(Trait) options
MIT License
1.68k stars 117 forks source link

Change display on enum without `_variant` to "use as default" behaviour #411

Open JelteF opened 1 week ago

JelteF commented 1 week ago

This should work:

#[derive(Display)]
#[display("{_0}")]
enum Enum<T> {
    #[display("A")]
    A(i32),
    #[display("B")]
    B(&'static str),
    #[display("C")]
    C(T),
}

fn main() {
    assert_eq!(Enum::<u8>::A(1).to_string(), "A");
    assert_eq!(Enum::<u8>::B("abc").to_string(), "B");
    assert_eq!(Enum::<u8>::C(9).to_string(), "C");
}

As well as:

#[derive(Display)]
#[display("some content: {_0}")]
enum Enum<T> {
    #[display("A")]
    A(i32),
    B(&'static str),
    C(T),
}

fn main() {
    assert_eq!(Enum::<u8>::A(1).to_string(), "A");
    assert_eq!(Enum::<u8>::B("abc").to_string(), "some content: abc");
    assert_eq!(Enum::<u8>::C(9).to_string(), "some content: 9");
}

Related to #395. Note that transparence checks should also work as expected.