use crate::Cast;
#[doc = crate::_tags!(num)]
#[doc = crate::_doc_location!("num/grain")]
pub trait PrimitiveSplit<T, const LEN: usize> {
#[must_use]
fn into_array_be(self) -> [T; LEN];
#[must_use]
fn into_array_le(self) -> [T; LEN];
#[must_use]
fn into_array_ne(self) -> [T; LEN];
}
macro_rules! impl_into_trait {
( $( $P:ident, $T:ident, $LEN:literal );+ $(;)? ) => {
$( impl_into_trait![@$P, $T, $LEN]; )+
};
(@$P:ident, $T:ident, $LEN:literal) => { crate::paste! {
impl PrimitiveSplit<$T, $LEN> for $P {
fn into_array_be(self) -> [$T; $LEN] { Cast(self).[<into_ $T _be>]() }
fn into_array_le(self) -> [$T; $LEN] { Cast(self).[<into_ $T _le>]() }
fn into_array_ne(self) -> [$T; $LEN] { Cast(self).[<into_ $T _ne>]() }
}
}};
}
impl_into_trait![
u128, u64, 2; u128, u32, 4; u128, u16, 8; u128, u8, 16;
u64, u32, 2; u64, u16, 4; u64, u8, 8;
u32, u16, 2; u32, u8, 4;
u16, u8, 2;
];