#![allow(clippy::disallowed_methods, clippy::disallowed_types)]
use std::future::Future;
use std::time::Instant;
use tokio::runtime::Handle;
pub(super) fn current() -> Option<Handle> {
Handle::try_current().ok()
}
pub(super) fn available() -> bool {
Handle::try_current().is_ok()
}
pub(super) fn spawn_detached<F>(runtime: &Handle, task: F)
where
F: Future<Output = ()> + Send + 'static,
{
drop(runtime.spawn(task));
}
pub(super) async fn sleep_until(deadline: Instant) {
tokio::time::sleep_until(deadline.into()).await;
}
pub(super) async fn timeout_at<F: Future>(
deadline: Instant,
future: F,
) -> Result<F::Output, super::Elapsed> {
tokio::time::timeout_at(deadline.into(), future)
.await
.map_err(|_| super::Elapsed)
}
pub(super) fn now() -> Instant {
tokio::time::Instant::now().into_std()
}