1use std::ops::AddAssign;
2
3pub trait Instant: Clone + Copy {
8 type Duration: Duration;
9
10 fn saturating_duration_since(&self, earlier: Self) -> Self::Duration;
14}
15
16pub trait Duration: Clone + Copy + AddAssign + PartialOrd {
17 fn zero() -> Self;
19
20 fn from_micros(micros: u64) -> Self;
22
23 fn is_zero(&self) -> bool;
25
26 fn div_duration_f64(self, rhs: Self) -> f64;
28}
29
30impl Instant for std::time::Instant {
31 type Duration = std::time::Duration;
32
33 #[inline(always)]
34 fn saturating_duration_since(&self, earlier: Self) -> Self::Duration {
35 self.saturating_duration_since(earlier)
36 }
37}
38
39impl Duration for std::time::Duration {
40 #[inline(always)]
41 fn zero() -> Self {
42 Self::ZERO
43 }
44
45 #[inline(always)]
46 fn from_micros(micros: u64) -> Self {
47 Self::from_micros(micros)
48 }
49
50 #[inline(always)]
51 fn is_zero(&self) -> bool {
52 self.is_zero()
53 }
54
55 #[inline(always)]
56 fn div_duration_f64(self, rhs: Self) -> f64 {
57 self.div_duration_f64(rhs)
58 }
59}