unit-enum 1.6.0

A procedural macro for deriving ordinal methods in unit-like enums for Rust.
Documentation
use unit_enum::UnitEnum;

#[derive(Debug, Clone, Copy, PartialEq, UnitEnum)]
enum Color {
    Red = 10,
    Green,
    Blue = 45654,
}

#[derive(Debug, Clone, Copy, PartialEq, UnitEnum)]
#[repr(u16)]
enum Status {
    Active = 1,
    Inactive = 2,
    #[unit_enum(other)]
    Unknown(u16),
}

fn static_name(color: Color) -> &'static str {
    color.name()
}

#[test]
fn name_outlives_value() {
    assert_eq!(static_name(Color::Green), "Green");

    const NAME: &str = Status::Unknown(3).name();
    assert_eq!(NAME, "Unknown");
}

#[test]
fn values_const_matches_iterator() {
    const ALL: [Color; Color::len()] = Color::VALUES;

    assert_eq!(ALL, [Color::Red, Color::Green, Color::Blue]);
    assert!(Color::values().eq(ALL));
    assert_eq!(Status::VALUES, [Status::Active, Status::Inactive]);
    assert!(Status::values().eq(Status::VALUES));
}

#[test]
fn values_index_by_ordinal() {
    for (ordinal, value) in Color::VALUES.into_iter().enumerate() {
        assert_eq!(value.ordinal(), ordinal);
        assert_eq!(Color::from_ordinal(ordinal), Some(value));
    }
}