pub struct Instant(/* private fields */);
Expand description
A measurement of a monotonically nondecreasing clock.
Opaque and useful only with Duration
.
Instants are guaranteed to be no less than any previously measured instant when created, and are often useful for tasks such as measuring benchmarks or timing how long an operation takes.
Note, however, that instants are not guaranteed to be steady. In other words, each tick of the underlying clock might not be the same length (e.g. some seconds may be longer than others). An instant may jump forwards or experience time dilation (slow down or speed up), but it will never go backwards.
Instants should generally be condsidered as opaque types that can only be compared to one another.
Though there is a method to get “the number of seconds” from an instant it is implementation dependent
and should be used with knowledge of how this particular Instant
was constructed.
Instead, prefer using other operations, such as measuring the duration between two instants, comparing two
instants, adding and subtracting Duration
.
This struct is almost identical to std::time::Instant
but provides
some additional saturating methods. And it can also be constructed with
fiber::clock
, in which case it behaves in a tarantool specific way.
Implementations§
source§impl Instant
impl Instant
sourcepub fn now() -> Self
pub fn now() -> Self
Returns an instant corresponding to “now”. Uses monotonic clock.
Examples
use tarantool::time::Instant;
let now = Instant::now();
sourcepub fn elapsed(&self) -> Duration
pub fn elapsed(&self) -> Duration
Returns the amount of time elapsed since this instant was created.
Examples
use std::time::Duration;
use tarantool::time::Instant;
use tarantool::fiber;
let instant = Instant::now();
let three_secs = Duration::from_secs(3);
fiber::sleep(three_secs);
assert!(instant.elapsed() >= three_secs);
sourcepub fn checked_add(&self, duration: Duration) -> Option<Instant>
pub fn checked_add(&self, duration: Duration) -> Option<Instant>
Returns Some(t)
where t
is the time self + duration
if t
can be represented as
Instant
(which means it’s inside the bounds of the underlying representation), None
otherwise.
sourcepub fn checked_sub(&self, duration: Duration) -> Option<Instant>
pub fn checked_sub(&self, duration: Duration) -> Option<Instant>
Returns Some(t)
where t
is the time self - duration
if t
can be represented as
Instant
(which means it’s inside the bounds of the underlying representation), None
otherwise.
sourcepub fn saturating_add(&self, duration: Duration) -> Instant
pub fn saturating_add(&self, duration: Duration) -> Instant
Saturating addition. Computes self + duration
, returning maximal possible
instant (allowed by the underlying representaion) if overflow occurred.
sourcepub fn saturating_sub(&self, duration: Duration) -> Instant
pub fn saturating_sub(&self, duration: Duration) -> Instant
Saturating subtraction. Computes self - duration
, returning minimal possible
instant (allowed by the underlying representaion) if overflow occurred.
sourcepub fn checked_duration_since(&self, earlier: Instant) -> Option<Duration>
pub fn checked_duration_since(&self, earlier: Instant) -> Option<Duration>
Returns the amount of time elapsed from another instant to this one, or None if that instant is later than this one.
Examples
use std::time::Duration;
use std::thread::sleep;
use tarantool::time::Instant;
let now = Instant::now();
sleep(Duration::new(1, 0));
let new_now = Instant::now();
println!("{:?}", new_now.checked_duration_since(now));
println!("{:?}", now.checked_duration_since(new_now)); // None
sourcepub fn duration_since(&self, earlier: Instant) -> Duration
pub fn duration_since(&self, earlier: Instant) -> Duration
Returns the amount of time elapsed from another instant to this one, or zero duration if that instant is later than this one.
Examples
use std::time::Duration;
use std::thread::sleep;
use tarantool::time::Instant;
let now = Instant::now();
sleep(Duration::new(1, 0));
let new_now = Instant::now();
println!("{:?}", new_now.duration_since(now));
println!("{:?}", now.duration_since(new_now)); // 0ns
sourcepub fn as_secs(&self) -> u64
pub fn as_secs(&self) -> u64
Get the inner representation of an Instant
.
Warning
The inner representation of an instant is implementation dependent
and should be used with knowledge of how this particular Instant
was constructed.
If possible prefer working with Instant
and Duration
directly without
getting its inner representation.
sourcepub fn as_secs_f64(&self) -> f64
pub fn as_secs_f64(&self) -> f64
Get the inner representation of an Instant
.
Warning
The inner representation of an instant is implementation dependent
and should be used with knowledge of how this particular Instant
was constructed.
If possible prefer working with Instant
and Duration
directly without
getting its inner representation.
sourcepub fn as_secs_f32(&self) -> f32
pub fn as_secs_f32(&self) -> f32
Get the inner representation of an Instant
.
Warning
The inner representation of an instant is implementation dependent
and should be used with knowledge of how this particular Instant
was constructed.
If possible prefer working with Instant
and Duration
directly without
getting its inner representation.
Trait Implementations§
source§impl AddAssign<Duration> for Instant
impl AddAssign<Duration> for Instant
source§fn add_assign(&mut self, other: Duration)
fn add_assign(&mut self, other: Duration)
+=
operation. Read moresource§impl Ord for Instant
impl Ord for Instant
source§impl PartialEq for Instant
impl PartialEq for Instant
source§impl PartialOrd for Instant
impl PartialOrd for Instant
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read moresource§impl SubAssign<Duration> for Instant
impl SubAssign<Duration> for Instant
source§fn sub_assign(&mut self, other: Duration)
fn sub_assign(&mut self, other: Duration)
-=
operation. Read more