1 use core::mem::{size_of, transmute}; 2 3 use crate::traits::Sealed; 4 5 macro_rules! impl_int_v1_32 { 6 ($(($trait:ident, $type:ty)),+) => {$( 7 pub trait $trait: Sealed<$type> { 8 fn to_be_bytes(self) -> [u8; size_of::<$type>()]; 9 fn to_le_bytes(self) -> [u8; size_of::<$type>()]; 10 fn to_ne_bytes(self) -> [u8; size_of::<$type>()]; 11 fn from_be_bytes(bytes: [u8; size_of::<$type>()]) -> Self; 12 fn from_le_bytes(bytes: [u8; size_of::<$type>()]) -> Self; 13 fn from_ne_bytes(bytes: [u8; size_of::<$type>()]) -> Self; 14 } 15 16 impl $trait for $type { 17 #[inline] 18 fn to_be_bytes(self) -> [u8; size_of::<Self>()] { 19 self.to_be().to_ne_bytes() 20 } 21 22 #[inline] 23 fn to_le_bytes(self) -> [u8; size_of::<Self>()] { 24 self.to_le().to_ne_bytes() 25 } 26 27 #[inline] 28 fn to_ne_bytes(self) -> [u8; size_of::<Self>()] { 29 unsafe { transmute(self) } 30 } 31 32 #[inline] 33 fn from_be_bytes(bytes: [u8; size_of::<Self>()]) -> Self { 34 Self::from_be(Self::from_ne_bytes(bytes)) 35 } 36 37 #[inline] 38 fn from_le_bytes(bytes: [u8; size_of::<Self>()]) -> Self { 39 Self::from_le(Self::from_ne_bytes(bytes)) 40 } 41 42 #[inline] 43 fn from_ne_bytes(bytes: [u8; size_of::<Self>()]) -> Self { 44 unsafe { transmute(bytes) } 45 } 46 } 47 )+}; 48 } 49 50 impl_int_v1_32![ 51 (u8_v1_32, u8), 52 (u16_v1_32, u16), 53 (u32_v1_32, u32), 54 (u64_v1_32, u64), 55 (u128_v1_32, u128), 56 (usize_v1_32, usize), 57 (i8_v1_32, i8), 58 (i16_v1_32, i16), 59 (i32_v1_32, i32), 60 (i64_v1_32, i64), 61 (i128_v1_32, i128), 62 (isize_v1_32, isize) 63 ]; 64