std::time::Instant does not exist for #[no_std] target.
If you call std::time::Instant::now() on a WASM platform, it will panic. This crate provides a partial
replacement for std::time::Instant that works on #[no_std] and WASM too.
This defines the type instant::Instant which is:
- A struct emulating the behavior of std::time::Instant if you disabled the feature
std. A constructor functionInstant::drom_durationis provided to construct an instant from acore::time::Duration. - A struct emulating the behavior of std::time::Instant if you are targeting
wasm32-unknown-unknownorwasm32-unknown-asmjsand you enabled either thestdwebor thewasm-bindgenfeature. This emulation is based on the javascriptperformance.now()function. - A type alias for
std::time::Instantotherwise.
Note that even if the stdweb or wasm-bindgen feature is enabled, this crate will continue to rely on std::time::Instant
as long as you are not targeting wasm32. This allows for portable code that will work on both native and WASM platforms.
With the std feature (enabled by default), this crate also exports the function instant::now() which returns a representation of the current time as an f64,
expressed in milliseconds, in a platform-agnostic way. instant::now() will either:
- Call
performance.now()when compiling for a WASM platform with the features stdweb or wasm-bindgen enabled, or using a custom javascript function. - Return the time elapsed since the Unix Epoch on native, non-WASM platforms.
Note: The old feature, now, has been deprecated. instant::now() is always exported and the now feature flag no longer has any effect. It remains listed in Cargo.toml to avoid introducing breaking changes and may be removed in future versions.
Cargo.toml:
[dependencies]
instant = "0.1"main.rs:
fn main() {
// Will be the same as `std::time::Instant`.
let now = instant::Instant::now();
}This example shows the use of the stdweb feature. It would be similar with wasm-bindgen.
Cargo.toml:
[dependencies]
instant = { version = "0.1", features = [ "stdweb" ] }main.rs:
fn main() {
// Will emulate `std::time::Instant` based on `performance.now()`.
let now = instant::Instant::now();
}This example shows the use of the inaccurate feature.
Cargo.toml:
[dependencies]
instant = { version = "0.1", features = [ "wasm-bindgen", "inaccurate" ] }main.rs:
fn main() {
// Will emulate `std::time::Instant` based on `Date.now()`.
let now = instant::Instant::now();
}Cargo.toml:
[features]
stdweb = [ "instant/stdweb" ]
wasm-bindgen = [ "instant/wasm-bindgen" ]
[dependencies]
instant = "0.1"lib.rs:
fn my_function() {
// Will select the proper implementation depending on the
// feature selected by the user.
let now = instant::Instant::now();
}Cargo.toml:
[features]
stdweb = [ "instant/stdweb" ]
wasm-bindgen = [ "instant/wasm-bindgen" ]
[dependencies]
instant = "0.1"lib.rs:
fn my_function() {
// Will select the proper implementation depending on the
// feature selected by the user.
let now_instant = instant::Instant::now();
let now_milliseconds = instant::now(); // In milliseconds.
}Cargo.toml:
[dependencies]
instant = "0.1"lib.rs:
fn my_function() {
// Will use the 'now' javascript implementation.
let now_instant = instant::Instant::now();
let now_milliseconds = instant::now(); // In milliseconds.
}javascript WASM bindings file:
function now() {
return Date.now() / 1000.0;
}