pub trait Ux: sealed::Sealed + Copy + Clone {
type Bytes: AsRef<[u8]> + Default + AsMut<[u8]>;
fn to_be_bytes(self) -> Self::Bytes;
fn from_be_bytes(bytes: Self::Bytes) -> Self;
}
mod sealed {
pub trait Sealed {}
impl Sealed for u8 {}
impl Sealed for u16 {}
impl Sealed for u32 {}
impl Sealed for u64 {}
}
impl Ux for u8 {
type Bytes = [u8; 1];
fn to_be_bytes(self) -> Self::Bytes {
self.to_be_bytes()
}
fn from_be_bytes(bytes: Self::Bytes) -> Self {
Self::from_be_bytes(bytes)
}
}
impl Ux for u16 {
type Bytes = [u8; 2];
fn to_be_bytes(self) -> Self::Bytes {
self.to_be_bytes()
}
fn from_be_bytes(bytes: Self::Bytes) -> Self {
Self::from_be_bytes(bytes)
}
}
impl Ux for u32 {
type Bytes = [u8; 4];
fn to_be_bytes(self) -> Self::Bytes {
self.to_be_bytes()
}
fn from_be_bytes(bytes: Self::Bytes) -> Self {
Self::from_be_bytes(bytes)
}
}
impl Ux for u64 {
type Bytes = [u8; 8];
fn to_be_bytes(self) -> Self::Bytes {
self.to_be_bytes()
}
fn from_be_bytes(bytes: Self::Bytes) -> Self {
Self::from_be_bytes(bytes)
}
}