1pub trait LargeType {
3 type Large;
4
5 fn to_large(self) -> Self::Large;
7
8 fn from_large(l: Self::Large) -> Self;
10}
11
12macro_rules! impl_large_type {
13 ($($s:ident -> $l:ident),* $(,)?) => {
14 $(impl LargeType for $s {
15 type Large = $l;
16
17 fn to_large(self) -> Self::Large {
18 self as $l
19 }
20
21 fn from_large(l: Self::Large) -> Self {
22 l as $s
23 }
24 })*
25 };
26}
27
28impl_large_type!(
29 u128 -> f64, i128 -> f64, u64 -> u128, i64 -> i128, f64 -> f64, u32 -> u64,
30 i32 -> i64, f32 -> f64, u16 -> u32, i16 -> i32, u8 -> u16, i8 -> i16,
31);