use core::mem;
use crate::behavior::Unassociated;
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
pub enum Primitive {
U8 = mem::size_of::<u8>().cast_signed(),
U16 = mem::size_of::<u16>().cast_signed(),
U32 = mem::size_of::<u32>().cast_signed(),
U64 = mem::size_of::<u64>().cast_signed(),
}
impl Primitive {
#[inline]
pub const fn appropriate<T>() -> Option<Self>
where
T: Unassociated,
{
match mem::size_of::<T>() {
1 => Some(Self::U8),
2 => Some(Self::U16),
4 => Some(Self::U32),
8 => Some(Self::U64),
_ => None,
}
}
}
#[derive(Clone, Copy)]
#[repr(C)]
pub union PrimitiveUnion {
pub u8: u8,
pub u16: u16,
pub u32: u32,
pub u64: u64,
}