mod async_runtime;
#[macro_use]
pub mod task_local;
pub mod deterministic_rng;
pub mod instant;
pub mod mpsc;
pub mod mutex;
pub mod oneshot;
pub mod testing;
pub mod watch;
pub use async_runtime::AsyncRuntime;
pub use instant::Instant;
pub use mpsc::Mpsc;
pub use mpsc::MpscReceiver;
pub use mpsc::MpscSender;
pub use mpsc::MpscWeakSender;
pub use mpsc::SendError;
pub use mpsc::TryRecvError;
pub use mutex::Mutex;
pub use mutex::OwnedGuard;
pub use oneshot::Oneshot;
pub use oneshot::OneshotSender;
pub use threaded::BoxAny;
pub use threaded::BoxAsyncOnceMut;
pub use threaded::BoxFuture;
pub use threaded::BoxIterator;
pub use threaded::BoxMaybeAsyncOnceMut;
pub use threaded::BoxOnce;
pub use threaded::BoxStream;
pub use threaded::OptionalSend;
pub use threaded::OptionalSync;
pub use watch::RecvError;
pub use watch::Watch;
pub use watch::WatchReceiver;
pub use watch::WatchSender;
#[cfg(not(feature = "single-threaded"))]
mod threaded {
use std::any::Any;
use std::future::Future;
use std::pin::Pin;
use futures_util::Stream;
pub trait OptionalSend: Send {}
impl<T: Send + ?Sized> OptionalSend for T {}
pub trait OptionalSync: Sync {}
impl<T: Sync + ?Sized> OptionalSync for T {}
pub type BoxIterator<'a, T> = Box<dyn Iterator<Item = T> + Send + 'a>;
pub type BoxFuture<'a, T = ()> = Pin<Box<dyn Future<Output = T> + Send + 'a>>;
pub type BoxStream<'a, T> = Pin<Box<dyn Stream<Item = T> + Send + 'a>>;
pub type BoxAsyncOnceMut<'a, A, T = ()> = Box<dyn FnOnce(&mut A) -> BoxFuture<T> + Send + 'a>;
pub type BoxMaybeAsyncOnceMut<'a, A, T = ()> = Box<dyn FnOnce(&mut A) -> Option<BoxFuture<T>> + Send + 'a>;
pub type BoxOnce<'a, A, T = ()> = Box<dyn FnOnce(&A) -> T + Send + 'a>;
pub type BoxAny = Box<dyn Any + Send>;
}
#[cfg(feature = "single-threaded")]
mod threaded {
use std::any::Any;
use std::future::Future;
use std::pin::Pin;
use futures_util::Stream;
pub trait OptionalSend {}
impl<T: ?Sized> OptionalSend for T {}
pub trait OptionalSync {}
impl<T: ?Sized> OptionalSync for T {}
pub type BoxIterator<'a, T> = Box<dyn Iterator<Item = T> + 'a>;
pub type BoxFuture<'a, T = ()> = Pin<Box<dyn Future<Output = T> + 'a>>;
pub type BoxStream<'a, T> = Pin<Box<dyn Stream<Item = T> + 'a>>;
pub type BoxAsyncOnceMut<'a, A, T = ()> = Box<dyn FnOnce(&mut A) -> BoxFuture<T> + 'a>;
pub type BoxMaybeAsyncOnceMut<'a, A, T = ()> = Box<dyn FnOnce(&mut A) -> Option<BoxFuture<T>> + 'a>;
pub type BoxOnce<'a, A, T = ()> = Box<dyn FnOnce(&A) -> T + 'a>;
pub type BoxAny = Box<dyn Any>;
}