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
#![no_std]

pub mod dec;

pub trait Zero { const zero: Self; }
pub trait One  { const one : Self; }

macro_rules! impl_zero_one {
    ($($t:ty),*) => {$(
        impl Zero for $t { const zero: Self = 0; }
        impl One  for $t { const one : Self = 1; }
    )*}
}

impl_zero_one!(usize, u8, u16, u32, u64,
               isize, i8, i16, i32, i64);

impl Zero for f32 { const zero: Self = 0.; }
impl One  for f32 { const one : Self = 1.; }

impl Zero for f64 { const zero: Self = 0.; }
impl One  for f64 { const one : Self = 1.; }

impl Zero for char { const zero: Self = '\0'; }

impl<T> Zero for *const T { const zero: Self = 0 as Self; }
impl<T> Zero for *mut   T { const zero: Self = 0 as Self; }