use std::future::Future;
#[cfg(not(target_arch = "wasm32"))]
pub trait MaybeSendSync: Send + Sync {}
#[cfg(not(target_arch = "wasm32"))]
impl<T: ?Sized + Send + Sync> MaybeSendSync for T {}
#[cfg(target_arch = "wasm32")]
pub trait MaybeSendSync {}
#[cfg(target_arch = "wasm32")]
impl<T: ?Sized> MaybeSendSync for T {}
#[cfg(not(target_arch = "wasm32"))]
pub fn spawn<F>(f: F)
where
F: Future<Output = ()> + Send + 'static,
{
tokio::spawn(f);
}
#[cfg(target_arch = "wasm32")]
pub fn spawn<F>(f: F)
where
F: Future<Output = ()> + 'static,
{
wasm_bindgen_futures::spawn_local(f);
}
#[cfg(all(not(target_arch = "wasm32"), feature = "wallet"))]
pub fn now_unix_secs() -> u64 {
std::time::SystemTime::now()
.duration_since(std::time::UNIX_EPOCH)
.map(|d| d.as_secs())
.unwrap_or(0)
}
#[cfg(all(target_arch = "wasm32", feature = "wallet"))]
pub fn now_unix_secs() -> u64 {
(js_sys::Date::now() / 1000.0) as u64
}
#[cfg(not(target_arch = "wasm32"))]
pub async fn sleep_ms(ms: u32) {
tokio::time::sleep(std::time::Duration::from_millis(ms as u64)).await;
}
#[cfg(target_arch = "wasm32")]
pub async fn sleep_ms(ms: u32) {
use wasm_bindgen_futures::JsFuture;
let promise = js_sys::Promise::new(&mut |resolve, _| {
if let Some(window) = web_sys::window() {
let _ = window.set_timeout_with_callback_and_timeout_and_arguments_0(
&resolve,
ms as i32,
);
}
});
let _ = JsFuture::from(promise).await;
}