perhaps this? ```rust struct OverflowError; trait Duration: Copy + Eq + PartialEq + Hash + Add + Sub + Mul<u32> + Div<u32> { fn from_secs(secs: u32) -> Result<Self, OverflowError>; fn from_millis(millis: u32) -> Result<Self, OverflowError>; fn from_micros(micros: u32) -> Result<Self, OverflowError>; fn as_secs(self) -> Result<u32, OverflowError>; fn as_millis(self) -> Result<u32, OverflowError>; fn as_micros(self) -> Result<u32, OverflowError>; } trait CountDown { type Duration: Duration; fn start(&mut self, dur: Duration); fn is_done(&mut self) -> bool; } trait CountUp { type Duration: Duration; fn start(&mut self); fn read(&mut self) -> Result<Duration, OverflowError>; }