scanlex/
int.rs

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