use std::time::Duration;
#[cfg(feature = "nusb")]
pub async fn sleep(d: Duration) {
crate::deadline::with_timeout(std::future::pending::<()>(), d).await;
}
#[cfg(all(not(feature = "nusb"), feature = "web"))]
pub async fn sleep(d: Duration) {
use wasm_bindgen::JsCast;
let ms = d.as_millis().min(i32::MAX as u128) as i32;
let promise = js_sys::Promise::new(&mut |resolve, _reject| {
let global = js_sys::global();
let set_timeout = js_sys::Reflect::get(&global, &"setTimeout".into())
.expect("a JS global without setTimeout")
.unchecked_into::<js_sys::Function>();
set_timeout
.call2(&global, &resolve, &ms.into())
.expect("setTimeout refused a callback");
});
let _ = wasm_bindgen_futures::JsFuture::from(promise).await;
}
#[cfg(not(any(feature = "nusb", feature = "web")))]
pub async fn sleep(d: Duration) {
std::thread::sleep(d);
}