pub trait Truncate<T> {
fn truncate(x: T) -> Self;
}
macro_rules! define_truncate {
($from:ident, $to:ident) => {
impl Truncate<$from> for $to {
#[allow(clippy::cast_possible_truncation)]
fn truncate(x: $from) -> $to {
(x & $from::from($to::MAX)) as $to
}
}
};
}
define_truncate!(u32, u16);
define_truncate!(u64, u16);
define_truncate!(u64, u32);
define_truncate!(u128, u8);
define_truncate!(u128, u16);
define_truncate!(u128, u32);
define_truncate!(usize, u8);
define_truncate!(usize, u16);