[−][src]Crate enum_ordinalize
Enum Ordinalize
This crates provides create_ordinalized_enum
macro to let enums can not only get its variants' ordinal but also be constructed from an ordinal.
Create an Ordinalized Enum
create_ordinalized_enum
macro can create an enum and implement a ordinal
method, as well as from_ordinal
and from_ordinal_unsafe
associated functions for it.
The new enum also implements Debug
, PartialOrd
, Ord
, PartialEq
, Clone
, Eq
, Hash
and Copy
traits.
#[macro_use] extern crate enum_ordinalize; create_ordinalized_enum!(MyEnum, Zero, One, Two ); assert_eq!(2, MyEnum::Two.ordinal()); assert_eq!(Some(MyEnum::One), MyEnum::from_ordinal(1)); create_ordinalized_enum!(pub MyPublicEnum, A, B, C ); assert_eq!(2, MyPublicEnum::C.ordinal()); assert_eq!(Some(MyPublicEnum::B), MyPublicEnum::from_ordinal(1)); create_ordinalized_enum!(MySpecialEnum, Two = 2, Four = 4, Eight = 8 ); assert_eq!(2, MySpecialEnum::Two.ordinal()); assert_eq!(Some(MySpecialEnum::Four), MySpecialEnum::from_ordinal(4));
About an Ordinalized Enum
An ordinalized enum is sized isize by default. If you want to change it, just assign an integer type explicitly.
#[macro_use] extern crate enum_ordinalize; create_ordinalized_enum!(MyEnum: u8, Zero, One, Two ); assert_eq!(2u8, MyEnum::Two.ordinal()); assert_eq!(Some(MyEnum::One), MyEnum::from_ordinal(1u8));
If you are 100% sure that the isize value can transmute into a variant of your ordinalized enum. You can use the from_ordinal_unsafe
associated function and the unsafe keyword to speed up.
#[macro_use] extern crate enum_ordinalize; create_ordinalized_enum!(MyEnum, Zero, One, Two ); assert_eq!(MyEnum::One, unsafe{MyEnum::from_ordinal_unsafe(1)});
Macros
create_ordinalized_enum | Create an enum and implement a |