pub trait Clock: Send + Sync {
// Required methods
fn now(&self) -> SystemTime;
fn elapsed(&self) -> Duration;
fn sleep_until(
&self,
at: SystemTime,
) -> Pin<Box<dyn Future<Output = Result<(), WallTimerError>> + Send>>;
// Provided methods
fn deadline(
&self,
duration: Duration,
) -> Pin<Box<dyn Future<Output = ()> + Send>> { ... }
fn wait_out(
&self,
wait: Duration,
) -> Pin<Box<dyn Future<Output = ()> + Send>> { ... }
}Expand description
The wall clock that timestamps use (§7.2).
Returning SystemTime preserves pre-epoch and out-of-range readings so the
timestamp layer can reject them when converting to 48-bit milliseconds.
Required Methods§
Sourcefn now(&self) -> SystemTime
fn now(&self) -> SystemTime
The wall clock’s current time.
Sourcefn elapsed(&self) -> Duration
fn elapsed(&self) -> Duration
Monotonic time since an arbitrary origin, counting time the system spent asleep (§16.6). Readings never decrease within a process; only differences between two readings of one clock mean anything.
Sourcefn sleep_until(
&self,
at: SystemTime,
) -> Pin<Box<dyn Future<Output = Result<(), WallTimerError>> + Send>>
fn sleep_until( &self, at: SystemTime, ) -> Pin<Box<dyn Future<Output = Result<(), WallTimerError>> + Send>>
Wait until the wall clock reads at or later, however it gets
there: by running, or by being set past it (§13.2). A time already
reached ends the wait at once, and a clock set back moves the wait’s
end with it. The clock itself says when it reaches at; nothing reads
it again on a timer. A clock that can’t say fails the wait.
Provided Methods§
Sourcefn deadline(
&self,
duration: Duration,
) -> Pin<Box<dyn Future<Output = ()> + Send>>
fn deadline( &self, duration: Duration, ) -> Pin<Box<dyn Future<Output = ()> + Send>>
End once duration of elapsed time has passed: a deadline that
work races, such as a sign-in’s wait for its callback or a stalled
transfer’s, or an interval, such as the idle time between passes.
System clocks use the runtime’s monotonic timer; controlled clocks
wake only when their supplied time advances.
Sourcefn wait_out(&self, wait: Duration) -> Pin<Box<dyn Future<Output = ()> + Send>>
fn wait_out(&self, wait: Duration) -> Pin<Box<dyn Future<Output = ()> + Send>>
Wait out wait before trying again: a backoff, a provider’s
cooldown, or the spacing between requests the code chose. It passes
as a deadline of the same length does; a test’s clock may move its
time to the wait’s end as the code arms it, since no work races it.
Implementors§
impl Clock for FixedClock
test-utils only.impl Clock for PollingClock
impl Clock for SystemClock
impl<F> Clock for ClosureClock<F>
test-utils only.impl<S> Clock for RecordingClock<S>
test-utils only.