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
use std::cell::Cell; use time; pub trait Time { fn get(&self) -> time::Timespec; } #[derive(Default, Debug)] pub struct RealTime; impl Time for RealTime { fn get(&self) -> time::Timespec { time::get_time() } } #[derive(Default)] pub struct IncrementalTime { counter: Cell<i64>, } impl Time for IncrementalTime { fn get(&self) -> time::Timespec { let c = self.counter.get(); let result = time::Timespec::new(c, 0); self.counter.set(c + 1); result } } #[derive(Default)] pub struct ZeroTime { } impl Time for ZeroTime { fn get(&self) -> time::Timespec { time::Timespec::new(0, 0) } }