Trait enum_ordinalize::Ordinalize
source · pub trait Ordinalize: Sized + 'static {
type VariantType;
const VARIANT_COUNT: usize;
const VARIANTS: &'static [Self];
const VALUES: &'static [Self::VariantType];
// Required methods
unsafe fn from_ordinal_unsafe(number: Self::VariantType) -> Self;
fn from_ordinal(number: Self::VariantType) -> Option<Self>
where Self: Sized;
fn ordinal(&self) -> Self::VariantType;
}
Available on crate feature
traits
only.Expand description
This trait provides an enum with the ability to not only obtain the ordinal values of its variants but also allows for the construction of enums from an ordinal value.
use enum_ordinalize::Ordinalize;
#[repr(u8)]
enum E {
A,
B,
}
impl Ordinalize for E {
type VariantType = u8;
const VALUES: &'static [Self::VariantType] = &[0, 1];
const VARIANTS: &'static [Self] = &[E::A, E::B];
const VARIANT_COUNT: usize = 2;
#[inline]
unsafe fn from_ordinal_unsafe(number: Self::VariantType) -> Self {
::core::mem::transmute(number)
}
#[inline]
fn from_ordinal(number: Self::VariantType) -> Option<Self> {
match number {
0 => Some(Self::A),
1 => Some(Self::B),
_ => None,
}
}
#[inline]
fn ordinal(&self) -> Self::VariantType {
match self {
Self::A => 0,
Self::B => 1,
}
}
}
Required Associated Types§
sourcetype VariantType
type VariantType
The type of the values of the variants.
Required Associated Constants§
sourceconst VARIANT_COUNT: usize
const VARIANT_COUNT: usize
The count of variants.
sourceconst VALUES: &'static [Self::VariantType]
const VALUES: &'static [Self::VariantType]
List of values for all variants of this enum.
Required Methods§
sourceunsafe fn from_ordinal_unsafe(number: Self::VariantType) -> Self
unsafe fn from_ordinal_unsafe(number: Self::VariantType) -> Self
Obtain a variant based on an integer number.
Safety
You have to ensure that the input integer number can correspond to a variant on your own.
sourcefn from_ordinal(number: Self::VariantType) -> Option<Self>where
Self: Sized,
fn from_ordinal(number: Self::VariantType) -> Option<Self>where
Self: Sized,
Obtain a variant based on an integer number.
sourcefn ordinal(&self) -> Self::VariantType
fn ordinal(&self) -> Self::VariantType
Retrieve the integer number of this variant.
Object Safety§
This trait is not object safe.