# Instant 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 WASM too. This defines the type `instant::Instant` which is: * A struct emulating the behavior of **std::time::Instant** if you are targeting `wasm32-unknown-unknown` or `wasm32-unknown-asmjs` **and** you enabled either the `stdweb` or the `wasm-bindgen` feature. This emulation is based on the javascript `performance.now()` function. * A type alias for `std::time::Instant` otherwise. 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. ### The feature `now`. By enabling the feature `now` the function `instant::now()` will be exported and 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. * Call `time::precise_time_s() * 1000.0` otherwise. The result is expressed in milliseconds. ## Examples ### Using `instant` for a native platform. _Cargo.toml_: ```toml [dependencies] instant = "0.1" ``` _main.rs_: ```rust fn main() { // Will be the same as `std::time::Instant`. let now = instant::Instant::new(); } ``` ----- ### Using `instant` for a WASM platform. This example shows the use of the `stdweb` feature. It would be similar with `wasm-bindgen`. _Cargo.toml_: ```toml [dependencies] instant = { version = "0.1", features = [ "stdweb" ] } ``` _main.rs_: ```rust fn main() { // Will emulate `std::time::Instant` based on `performance.now()`. let now = instant::Instant::new(); } ``` ----- ### Using `instant` for a WASM platform where `performance.now()` is not available. This example shows the use of the `inaccurate` feature. _Cargo.toml_: ```toml [dependencies] instant = { version = "0.1", features = [ "wasm-bindgen", "inaccurate" ] } ``` _main.rs_: ```rust fn main() { // Will emulate `std::time::Instant` based on `Date.now()`. let now = instant::Instant::new(); } ``` ----- ### Using `instant` for any platform enabling a feature transitively. _Cargo.toml_: ```toml [features] stdweb = [ "instant/stdweb" ] wasm-bindgen = [ "instant/wasm-bindgen" ] [dependencies] instant = "0.1" ``` _lib.rs_: ```rust fn my_function() { // Will select the proper implementation depending on the // feature selected by the user. let now = instant::Instant::new(); } ``` ----- ### Using the feature `now`. _Cargo.toml_: ```toml [features] stdweb = [ "instant/stdweb" ] wasm-bindgen = [ "instant/wasm-bindgen" ] [dependencies] instant = { version = "0.1", features = [ "now" ] } ``` _lib.rs_: ```rust fn my_function() { // Will select the proper implementation depending on the // feature selected by the user. let now_instant = instant::Instant::new(); let now_milliseconds = instant::now(); // In milliseconds. } ``` ### Using the feature `now` without `stdweb` or `wasm-bindgen`. _Cargo.toml_: ```toml [dependencies] instant = { version = "0.", features = [ "now" ] } ``` _lib.rs_: ```rust fn my_function() { // Will use the 'now' javascript implementation. let now_instant = instant::Instant::new(); let now_milliseconds = instant::now(); // In milliseconds. } ``` _javascript WASM bindings file_: ```js function now() { return Date.now() / 1000.0; } ```