use std::future::Future;
use std::time::Duration;
#[derive(Clone, Debug)]
pub enum Runtime {
None,
#[cfg(feature = "rt_tokio_1")]
Tokio1,
#[cfg(feature = "rt_async-std_1")]
AsyncStd1,
}
impl Default for Runtime {
fn default() -> Self {
Runtime::None
}
}
pub enum TimeoutError {
Timeout,
NoRuntime,
}
impl Runtime {
#[allow(unused_variables)]
pub async fn timeout<F>(&self, duration: Duration, future: F) -> Result<F::Output, TimeoutError>
where
F: Future,
{
match self {
Self::None => Err(TimeoutError::NoRuntime),
#[cfg(feature = "rt_tokio_1")]
Self::Tokio1 => tokio::time::timeout(duration, future)
.await
.map_err(|_| TimeoutError::Timeout),
#[cfg(feature = "rt_async-std_1")]
Self::AsyncStd1 => async_std::future::timeout(duration, future)
.await
.map_err(|_| TimeoutError::Timeout),
}
}
}