enum_index 0.2.0

Trait and macros for extracting Enum variant index
Documentation
extern crate enum_index;
#[macro_use]
extern crate enum_index_derive;

use enum_index::{EnumIndex, IndexEnum};

#[allow(dead_code)]
#[derive(EnumIndex)]
enum TestEnumFirst {
    VariantA,
    VariantB(bool),
    VariantC{x: f32, y: u64}
}

#[test]
fn test_enum_index_derive() {
    assert_eq!(TestEnumFirst::VariantA.enum_index(), 0usize);
    assert_eq!(TestEnumFirst::VariantB(false).enum_index(), 1usize);
    assert_eq!(TestEnumFirst::VariantC { x: 0f32, y: 0u64}.enum_index(), 2usize);
}

#[allow(dead_code)]
#[derive(IndexEnum, PartialEq, Debug)]
enum TestEnumSecond {
    VariantA,
    VariantB(u64),
    VariantC{x: f32, y: f64}
}

#[test]
fn test_index_enum_derive() {
    assert_eq!(TestEnumSecond::index_enum(0), Some(TestEnumSecond::VariantA));
    assert_eq!(TestEnumSecond::index_enum(1), Some(TestEnumSecond::VariantB(u64::default())));
    assert_eq!(TestEnumSecond::index_enum(2), Some(TestEnumSecond::VariantC{
        x: f32::default(), y: f64::default()
    }));
    assert_eq!(TestEnumSecond::index_enum(3), None);
}