1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
//! Extensions and utilities for working with time.
/// An extension for the `std::time::Duration` type providing some simple methods for easy access
/// to an `f64` representation of seconds, ms, mins, hrs, and other units of time.
///
/// While these measurements make it easier to work with sketches and artworks, it's worth noting
/// that resolution may be lost, especially at high values.
pub trait DurationF64 {
/// A simple way of retrieving the duration in seconds.
fn secs(&self) -> f64;
/// A simple way of retrieving the duration in milliseconds.
///
/// By default, this is implemented as `self.secs() * 1_000.0`.
fn ms(&self) -> f64 {
self.secs() * 1_000.0
}
/// A simple way of retrieving the duration as minutes.
fn mins(&self) -> f64 {
self.secs() / 60.0
}
/// A simple way of retrieving the duration as hrs.
fn hrs(&self) -> f64 {
self.secs() / 3_600.0
}
/// A simple way of retrieving the duration as days.
fn days(&self) -> f64 {
self.secs() / 86_400.0
}
/// A simple way of retrieving the duration as weeks.
fn weeks(&self) -> f64 {
self.secs() / 604_800.0
}
}
impl DurationF64 for std::time::Duration {
fn secs(&self) -> f64 {
self.as_secs() as f64 + self.subsec_nanos() as f64 * 1e-9
}
}