1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
pub trait Cast<T> {
fn cast(value: T) -> Self;
}
macro_rules! cast_impl {
($TYPE: ty, $FROM: ty) => {
impl Cast<$FROM> for $TYPE {
fn cast(value: $FROM) -> Self {
value as Self
}
}
};
($TYPE: ty) => {
cast_impl!($TYPE, u8);
cast_impl!($TYPE, u16);
cast_impl!($TYPE, u32);
cast_impl!($TYPE, u64);
#[cfg(feature = "i128")]
cast_impl!($TYPE, u128);
cast_impl!($TYPE, usize);
cast_impl!($TYPE, i8);
cast_impl!($TYPE, i16);
cast_impl!($TYPE, i32);
cast_impl!($TYPE, i64);
#[cfg(feature = "i128")]
cast_impl!($TYPE, i128);
cast_impl!($TYPE, isize);
cast_impl!($TYPE, f32);
cast_impl!($TYPE, f64);
};
}
cast_impl!(u8);
cast_impl!(u16);
cast_impl!(u32);
cast_impl!(u64);
#[cfg(feature = "i128")]
cast_impl!(u128);
cast_impl!(usize);
cast_impl!(i8);
cast_impl!(i16);
cast_impl!(i32);
cast_impl!(i64);
#[cfg(feature = "i128")]
cast_impl!(i128);
cast_impl!(isize);
cast_impl!(f32);
cast_impl!(f64);