1mod async_runtime;
20#[macro_use]
21pub mod task_local;
22pub mod deterministic_rng;
23pub mod instant;
24pub mod mpsc;
25pub mod mutex;
26pub mod oneshot;
27pub mod testing;
28pub mod watch;
29
30pub use async_runtime::AsyncRuntime;
31pub use instant::Instant;
32pub use mpsc::Mpsc;
33pub use mpsc::MpscReceiver;
34pub use mpsc::MpscSender;
35pub use mpsc::MpscWeakSender;
36pub use mpsc::SendError;
37pub use mpsc::TryRecvError;
38pub use mutex::Mutex;
39pub use mutex::OwnedGuard;
40pub use oneshot::Oneshot;
41pub use oneshot::OneshotSender;
42pub use threaded::BoxAny;
43pub use threaded::BoxAsyncOnceMut;
44pub use threaded::BoxFuture;
45pub use threaded::BoxIterator;
46pub use threaded::BoxMaybeAsyncOnceMut;
47pub use threaded::BoxOnce;
48pub use threaded::BoxStream;
49pub use threaded::OptionalSend;
50pub use threaded::OptionalSync;
51pub use watch::RecvError;
52pub use watch::Watch;
53pub use watch::WatchReceiver;
54pub use watch::WatchSender;
55
56#[cfg(not(feature = "single-threaded"))]
57mod threaded {
58 use std::any::Any;
59 use std::future::Future;
60 use std::pin::Pin;
61
62 use futures_util::Stream;
63
64 pub trait OptionalSend: Send {}
67 impl<T: Send + ?Sized> OptionalSend for T {}
68
69 pub trait OptionalSync: Sync {}
72 impl<T: Sync + ?Sized> OptionalSync for T {}
73
74 pub type BoxIterator<'a, T> = Box<dyn Iterator<Item = T> + Send + 'a>;
76 pub type BoxFuture<'a, T = ()> = Pin<Box<dyn Future<Output = T> + Send + 'a>>;
78 pub type BoxStream<'a, T> = Pin<Box<dyn Stream<Item = T> + Send + 'a>>;
80 pub type BoxAsyncOnceMut<'a, A, T = ()> = Box<dyn FnOnce(&mut A) -> BoxFuture<T> + Send + 'a>;
82 pub type BoxMaybeAsyncOnceMut<'a, A, T = ()> = Box<dyn FnOnce(&mut A) -> Option<BoxFuture<T>> + Send + 'a>;
84 pub type BoxOnce<'a, A, T = ()> = Box<dyn FnOnce(&A) -> T + Send + 'a>;
86 pub type BoxAny = Box<dyn Any + Send>;
88}
89
90#[cfg(feature = "single-threaded")]
91mod threaded {
92 use std::any::Any;
93 use std::future::Future;
94 use std::pin::Pin;
95
96 use futures_util::Stream;
97
98 pub trait OptionalSend {}
101 impl<T: ?Sized> OptionalSend for T {}
102
103 pub trait OptionalSync {}
106 impl<T: ?Sized> OptionalSync for T {}
107
108 pub type BoxIterator<'a, T> = Box<dyn Iterator<Item = T> + 'a>;
110 pub type BoxFuture<'a, T = ()> = Pin<Box<dyn Future<Output = T> + 'a>>;
112 pub type BoxStream<'a, T> = Pin<Box<dyn Stream<Item = T> + 'a>>;
114 pub type BoxAsyncOnceMut<'a, A, T = ()> = Box<dyn FnOnce(&mut A) -> BoxFuture<T> + 'a>;
116 pub type BoxMaybeAsyncOnceMut<'a, A, T = ()> = Box<dyn FnOnce(&mut A) -> Option<BoxFuture<T>> + 'a>;
118 pub type BoxOnce<'a, A, T = ()> = Box<dyn FnOnce(&A) -> T + 'a>;
120 pub type BoxAny = Box<dyn Any>;
122}