use crate::Result;
use cfg_if::cfg_if;
macro_rules! decl_default_runtime {
($body:expr) => {
pub fn default_runtime() -> Result<DefaultRuntime> {
$body
}
};
}
cfg_if! {
if #[cfg(feature = "tokio")] {
type DefaultRuntime = async_rs::TokioRuntime;
pub(crate) type DefaultRuntimeKit = async_rs::Tokio;
decl_default_runtime! {
{
#[cfg(test)]
return Ok(async_rs::Runtime::tokio()?);
#[cfg(not(test))]
return Ok(async_rs::Runtime::tokio_current());
}
}
} else if #[cfg(feature = "async-global-executor")] {
type DefaultRuntime = async_rs::AGERuntime;
pub(crate) type DefaultRuntimeKit = async_rs::util::RuntimeParts<async_rs::AsyncGlobalExecutor, async_rs::AsyncIO>;
decl_default_runtime! { Ok(async_rs::Runtime::async_global_executor()) }
} else if #[cfg(feature = "smol")] {
type DefaultRuntime = async_rs::SmolRuntime;
pub(crate) type DefaultRuntimeKit = async_rs::Smol;
decl_default_runtime! { Ok(async_rs::Runtime::smol()) }
} else {
type DefaultRuntime = async_rs::NoopRuntime;
pub(crate) type DefaultRuntimeKit = async_rs::Noop;
decl_default_runtime! { Err(crate::ErrorKind::NoDefaultRuntime.into()) }
}
}