1pub trait Int {
2 type Type;
3 fn min_value() -> i64;
4 fn max_value() -> i64;
5 fn name() -> &'static str;
6 fn cast(n: i64) -> Self::Type;
7}
8
9macro_rules! impl_int {
10 ($t:ident) => {
11 impl Int for $t {
12 type Type = $t;
13
14 fn min_value() -> i64 {
15 $t::min_value() as i64
16 }
17
18 fn max_value() -> i64 {
19 $t::max_value() as i64
20 }
21
22 fn name() -> &'static str {
23 stringify!($t)
24 }
25
26 fn cast(n: i64) -> Self::Type {
27 n as Self::Type
28 }
29 }
30 }
31
32}
33impl_int!(i8);
34impl_int!(i16);
35impl_int!(i32);
36impl_int!(i64);
37
38impl_int!(u8);
39impl_int!(u16);
40impl_int!(u32);
41impl_int!(u64);
42