use crate::{GeneralSubcategory, Script};
use core::convert::TryFrom;
use num_enum::TryFromPrimitiveError;
use zerovec::ule::{AsULE, PlainOldULE, ULE};
#[repr(transparent)]
#[derive(Debug, PartialEq, Eq, Clone, Copy)]
pub struct GeneralSubcategoryULE(u8);
impl AsULE for GeneralSubcategory {
type ULE = GeneralSubcategoryULE;
#[inline]
fn as_unaligned(self) -> Self::ULE {
let u = self as u8;
GeneralSubcategoryULE(u)
}
#[inline]
fn from_unaligned(unaligned: Self::ULE) -> Self {
unsafe { Self::from_unchecked(unaligned.0) }
}
}
unsafe impl ULE for GeneralSubcategoryULE {
type Error = TryFromPrimitiveError<GeneralSubcategory>;
fn validate_byte_slice(bytes: &[u8]) -> Result<(), Self::Error> {
for b in bytes {
GeneralSubcategory::try_from(*b)?;
}
Ok(())
}
}
impl AsULE for Script {
type ULE = PlainOldULE<2>;
#[inline]
fn as_unaligned(self) -> Self::ULE {
PlainOldULE(self.0.to_le_bytes())
}
#[inline]
fn from_unaligned(unaligned: Self::ULE) -> Self {
Script(u16::from_le_bytes(unaligned.0))
}
}