Enum diem_time_service::TimeService [−][src]
pub enum TimeService {
RealTimeService(RealTimeService),
MockTimeService(MockTimeService),
}Expand description
TimeService abstracts all time-related operations in one place that can be
easily mocked-out and controlled in tests or delegated to the actual
underlying runtime (usually tokio). It’s provided as an enum so we don’t have
to infect everything with a generic tag.
TimeService is async-focused: the sleep, interval, and timeout methods
all return Futures and Streams. That said, TimeService supports non-async
clients as well; simply use the sleep_blocking method instead of sleep.
Note that the blocking call will actually block the current thread until the
sleep time has elapsed.
TimeService tries to mirror the API provided by [tokio::time] to an
extent. The primary difference is that all time is expressed in relative
Durations. In other words, “sleep for 5s” vs “sleep until unix time
1607734460”. Absolute time is provided by TimeService::now which returns
the current unix time.
Note: you must also include the TimeServiceTrait to use the actual
time-related functionality.
Note: we have to provide our own Timeout and Interval types that
use the Sleep future, since tokio’s implementations are coupled to its
internal Sleep future.
Note: TimeService’s should be free (or very cheap) to clone and send around
between threads. In production (without test features), this enum is a
zero-sized type.
Variants
RealTimeService(RealTimeService)Tuple Fields of RealTimeService
MockTimeService(MockTimeService)Tuple Fields of MockTimeService
Implementations
Create a new real, production time service that actually uses the systemtime.
See RealTimeService.
Create a mock, simulated time service that does not query the system time and allows fine-grained control over advancing time and waking sleeping tasks.
See MockTimeService.
Trait Implementations
Performs the conversion.
Performs the conversion.
Query a monotonically nondecreasing clock. Returns an opaque type that
can only be compared to other Instants, i.e., this is a monotonic
relative time whereas now_unix_time is a
non-monotonic absolute time.
On Linux, this is equivalent to
clock_gettime(CLOCK_MONOTONIC, _)
See Instant for more details.
Query the current unix timestamp as a Duration.
When used on a TimeService::real(), this is equivalent to
SystemTime::now().duration_since(SystemTime::UNIX_EPOCH).
Note: the Duration returned from this function is NOT guaranteed to
be monotonic. Use now if you need monotonicity.
From the SystemTime docs:
Distinct from the
Instanttype, this time measurement is not monotonic. This means that you can save a file to the file system, then save another file to the file system, and the second file has aSystemTimemeasurement earlier than the first. In other words, an operation that happens after another operation in real time may have an earlier SystemTime!
For example, the system administrator could clock_settime into the
past, breaking clock time monotonicity.
On Linux, this is equivalent to
clock_gettime(CLOCK_REALTIME, _).
Query the current unix timestamp in seconds.
Equivalent to self.now_unix_time().as_secs().
See now_unix_time.
Return a Future that waits until duration has passed.
No work is performed while awaiting on the sleep future to complete. Sleep
operates at millisecond granularity and should not be used for tasks that
require high-resolution timers.
Cancelation
Canceling a sleep instance is done by dropping the returned future. No additional cleanup work is required.
Blocks the current thread until duration time has passed.
Creates a new Interval that yields with interval of period. The
first tick completes immediately. An interval will tick indefinitely.
Cancelation
At any time, the Interval value can be dropped. This cancels the interval.
Panics
This function panics if period is zero.
Require a Future to complete before the specified duration has elapsed.
If the future completes before the duration has elapsed, then the completed
value is returned. Otherwise, Err(Elapsed) is returned and the future is
canceled.
Cancelation
Cancelling a timeout is done by dropping the future. No additional cleanup or other work is required.
The original future may be obtained by calling Timeout::into_inner. This
consumes the Timeout.
Performs the conversion.
Performs the conversion.
Auto Trait Implementations
impl RefUnwindSafe for TimeService
impl Send for TimeService
impl Sync for TimeService
impl Unpin for TimeService
impl UnwindSafe for TimeService
Blanket Implementations
Mutably borrows from an owned value. Read more