From 8cdfa445d6629ffef4cb84967ff7017654045bc2 Mon Sep 17 00:00:00 2001 From: mo khan Date: Wed, 2 Jul 2025 18:36:06 -0600 Subject: chore: add vendor directory --- vendor/enum-ordinalize/src/traits.rs | 68 ++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 vendor/enum-ordinalize/src/traits.rs (limited to 'vendor/enum-ordinalize/src/traits.rs') diff --git a/vendor/enum-ordinalize/src/traits.rs b/vendor/enum-ordinalize/src/traits.rs new file mode 100644 index 00000000..f63fa3ff --- /dev/null +++ b/vendor/enum-ordinalize/src/traits.rs @@ -0,0 +1,68 @@ +/// 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. +/// +/// ```rust +/// 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 { +/// 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, +/// } +/// } +/// } +/// ``` +pub trait Ordinalize: Sized + 'static { + /// The type of the values of the variants. + type VariantType; + + /// The count of variants. + const VARIANT_COUNT: usize; + + /// List of this enum's variants. + const VARIANTS: &'static [Self]; + + /// List of values for all variants of this enum. + const VALUES: &'static [Self::VariantType]; + + /// 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. + unsafe fn from_ordinal_unsafe(number: Self::VariantType) -> Self; + + /// Obtain a variant based on an integer number. + fn from_ordinal(number: Self::VariantType) -> Option + where + Self: Sized; + + /// Retrieve the integer number of this variant. + fn ordinal(&self) -> Self::VariantType; +} -- cgit v1.2.3