Skip to main content

butt_head/
time.rs

1/// Abstraction for a duration of time.
2pub trait TimeDuration: Copy + PartialEq + 'static {
3    const ZERO: Self;
4    fn as_millis(&self) -> u64;
5    fn from_millis(millis: u64) -> Self;
6    fn saturating_sub(self, other: Self) -> Self;
7}
8
9/// Abstraction for a point in time.
10pub trait TimeInstant: Copy + PartialEq {
11    type Duration: TimeDuration;
12    fn duration_since(&self, earlier: Self) -> Self::Duration;
13    fn checked_add(self, duration: Self::Duration) -> Option<Self>;
14    fn checked_sub(self, duration: Self::Duration) -> Option<Self>;
15}