#[cfg(not(feature = "safe_lang"))]
#[cfg(all(feature = "unsafe_ffi", not(windows)))]
use crate::{_js_doc, WebWindow};
use crate::{Display, TimeDelta, impl_trait};
#[allow(unused_imports)]
use crate::{Web, js_number, js_uint32};
#[doc = crate::_tags!(runtime time)]
#[doc = crate::_doc_location!("lang/prog/ffi/js")]
#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct JsInstant {
pub ms: js_number,
}
#[rustfmt::skip]
impl JsInstant {
pub const fn as_millis_f64(self) -> js_number { self.ms }
pub const fn from_millis_f64(millis: js_number) -> Self { Self { ms: millis } }
pub const fn as_secs_f64(self) -> js_number { self.ms / 1_000.0 }
pub const fn from_secs_f64(secs: js_number) -> Self { Self { ms: secs * 1_000.0 } }
pub const fn since(self, earlier: Self) -> Self { Self::from_millis_f64(self.ms - earlier.ms) }
pub const fn delta_since(self, earlier: Self) -> TimeDelta { TimeDelta::from_js(self.since(earlier)) }
}
#[rustfmt::skip]
#[cfg(not(feature = "safe_lang"))]
#[cfg(all(feature = "unsafe_ffi", not(windows)))]
#[cfg_attr(nightly_doc, doc(cfg(feature = "unsafe_ffi")))]
#[cfg_attr(nightly_doc, doc(cfg(target_arch = "wasm32")))]
impl JsInstant {
pub fn now() -> Self { Web::performance_now() }
pub fn origin() -> Self { Web::performance_time_origin() }
pub fn reset(&mut self) { *self = Web::performance_now(); }
pub fn elapsed(self) -> Self { Self::from_millis_f64(Web::performance_now().ms - self.ms) }
pub fn delta_elapsed(self) -> TimeDelta { TimeDelta::from_js(self.elapsed()) }
}
impl_trait![fmt::Display for JsInstant |self, f| Display::fmt(&self.ms, f)];
#[doc = crate::_tags!(runtime time uid)]
#[doc = crate::_doc_location!("lang/prog/ffi/js")]
#[repr(C)]
#[derive(Copy, Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct JsTimeout {
pub(crate) id: js_uint32,
}
#[rustfmt::skip]
impl JsTimeout {
pub const fn invalid() -> Self { JsTimeout { id: 0 } }
pub const fn id(self) -> js_uint32 { self.id }
}
#[rustfmt::skip]
#[cfg(not(feature = "safe_lang"))]
#[cfg(all(feature = "unsafe_ffi", not(windows)))]
#[cfg_attr(nightly_doc, doc(cfg(feature = "unsafe_ffi")))]
#[cfg_attr(nightly_doc, doc(cfg(target_arch = "wasm32")))]
impl JsTimeout {
#[doc = _js_doc!("Window", "setTimeout")]
pub fn timeout(callback: extern "C" fn(), delay_ms: js_uint32) -> Self {
WebWindow::set_timeout(callback, delay_ms) }
#[doc = _js_doc!("Window", "setInterval")]
pub fn interval(callback: extern "C" fn(), interval_ms: js_uint32) -> Self {
WebWindow::set_timeout(callback, interval_ms) }
pub fn eval(js_code: &str) { WebWindow::eval(js_code) }
#[doc = _js_doc!("Window", "setTimeout")]
pub fn eval_timeout(js_code: &str, delay_ms: js_uint32) -> Self {
WebWindow::eval_timeout(js_code, delay_ms) }
#[doc = _js_doc!("Window", "setInterval")]
pub fn eval_interval(js_code: &str, interval_ms: js_uint32) -> Self {
WebWindow::eval_interval(js_code, interval_ms) }
#[doc = _js_doc!("Window", "clearTimeout")]
#[doc = _js_doc!("Window", "clearInterval")]
pub fn clear(self) { WebWindow::clear_timeout(self); }
}