pub enum Ident<T, Repr> {
Known(T),
Reserved(Repr),
}Expand description
A container that holds either a known variant, or an integer value with unknown meaning.
§Example
#[repr(u8)]
enum KnownColor {
Red = 0,
Green = 1,
Blue = 2,
}
// This can be autogenerated using something like `num_enum::TryFromPrimitive`.
impl TryFrom<u8> for KnownColor {
type Error = Unrecognized;
fn try_from(value: u8) -> Result<Self, Self::Error> {
match value {
0 => Ok(KnownColor::Red),
1 => Ok(KnownColor::Green),
2 => Ok(KnownColor::Blue),
_ => Err(Unrecognized),
}
}
}
struct Unrecognized;
type Color = Ident<KnownColor, u8>;
let green = Color::from_integer(1);
assert!(matches!(green, Color::Known(KnownColor::Green)));
let orange = Color::from_integer(5);
assert!(matches!(orange, Color::Reserved(5)));Variants§
Known(T)
A well-known value.
Reserved(Repr)
A reserved value.
This can be used to identify vendor-specific types.
Implementations§
Source§impl<T, Repr> Ident<T, Repr>
impl<T, Repr> Ident<T, Repr>
Sourcepub fn is_reserved(&self) -> bool
pub fn is_reserved(&self) -> bool
Test if the value is reserved.
Source§impl<T, Repr> Ident<T, Repr>
impl<T, Repr> Ident<T, Repr>
Sourcepub fn from_integer(value: Repr) -> Self
pub fn from_integer(value: Repr) -> Self
Try to decode a known identifier; if that fails store the raw number as a “reserved” value.
Trait Implementations§
impl<T: Copy, Repr: Copy> Copy for Ident<T, Repr>
Source§impl<T, Repr> From<T> for Ident<T, Repr>
Conversion from the “known” type to the Ident::Known variant.
impl<T, Repr> From<T> for Ident<T, Repr>
Conversion from the “known” type to the Ident::Known variant.
impl<T: PartialEq, Repr: PartialEq> StructuralPartialEq for Ident<T, Repr>
Auto Trait Implementations§
impl<T, Repr> Freeze for Ident<T, Repr>
impl<T, Repr> RefUnwindSafe for Ident<T, Repr>where
T: RefUnwindSafe,
Repr: RefUnwindSafe,
impl<T, Repr> Send for Ident<T, Repr>
impl<T, Repr> Sync for Ident<T, Repr>
impl<T, Repr> Unpin for Ident<T, Repr>
impl<T, Repr> UnsafeUnpin for Ident<T, Repr>where
T: UnsafeUnpin,
Repr: UnsafeUnpin,
impl<T, Repr> UnwindSafe for Ident<T, Repr>where
T: UnwindSafe,
Repr: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more