//! Asynchronous values. //! //! This module contains: //! //! - The [`Future`] trait. //! - The [`FutureExt`] and [`TryFutureExt`] trait, which provides adapters for //! chaining and composing futures. //! - Top-level future combinators like [`lazy`](lazy()) which creates a future //! from a closure that defines its return value, and [`ready`](ready()), //! which constructs a future with an immediate defined value. #[doc(no_inline)] pub use core::future::Future; #[cfg(feature = "alloc")] pub use futures_core::future::{BoxFuture, LocalBoxFuture}; pub use futures_core::future::{FusedFuture, TryFuture}; pub use futures_task::{FutureObj, LocalFutureObj, UnsafeFutureObj}; // Extension traits and combinators #[allow(clippy::module_inception)] mod future; pub use self::future::{ Flatten, Fuse, FutureExt, Inspect, IntoStream, Map, MapInto, NeverError, Then, UnitError, }; #[deprecated(note = "This is now an alias for [Flatten](Flatten)")] pub use self::future::FlattenStream; #[cfg(feature = "std")] pub use self::future::CatchUnwind; #[cfg(feature = "channel")] #[cfg_attr(docsrs, doc(cfg(feature = "channel")))] #[cfg(feature = "std")] pub use self::future::{Remote, RemoteHandle}; #[cfg(feature = "std")] pub use self::future::{Shared, WeakShared}; mod try_future; pub use self::try_future::{ AndThen, ErrInto, InspectErr, InspectOk, IntoFuture, MapErr, MapOk, MapOkOrElse, OkInto, OrElse, TryFlatten, TryFlattenStream, TryFutureExt, UnwrapOrElse, }; #[cfg(feature = "sink")] #[cfg_attr(docsrs, doc(cfg(feature = "sink")))] pub use self::try_future::FlattenSink; // Primitive futures mod lazy; pub use self::lazy::{lazy, Lazy}; mod pending; pub use self::pending::{pending, Pending}; mod maybe_done; pub use self::maybe_done::{maybe_done, MaybeDone}; mod try_maybe_done; pub use self::try_maybe_done::{try_maybe_done, TryMaybeDone}; mod option; pub use self::option::OptionFuture; mod poll_fn; pub use self::poll_fn::{poll_fn, PollFn}; mod poll_immediate; pub use self::poll_immediate::{poll_immediate, PollImmediate}; mod ready; pub use self::ready::{err, ok, ready, Ready}; mod join; pub use self::join::{join, join3, join4, join5, Join, Join3, Join4, Join5}; #[cfg(feature = "alloc")] mod join_all; #[cfg(feature = "alloc")] pub use self::join_all::{join_all, JoinAll}; mod select; pub use self::select::{select, Select}; #[cfg(feature = "alloc")] mod select_all; #[cfg(feature = "alloc")] pub use self::select_all::{select_all, SelectAll}; mod try_join; pub use self::try_join::{ try_join, try_join3, try_join4, try_join5, TryJoin, TryJoin3, TryJoin4, TryJoin5, }; #[cfg(feature = "alloc")] mod try_join_all; #[cfg(feature = "alloc")] pub use self::try_join_all::{try_join_all, TryJoinAll}; mod try_select; pub use self::try_select::{try_select, TrySelect}; #[cfg(feature = "alloc")] mod select_ok; #[cfg(feature = "alloc")] pub use self::select_ok::{select_ok, SelectOk}; mod either; pub use self::either::Either; #[cfg(not(futures_no_atomic_cas))] #[cfg(feature = "alloc")] mod abortable; #[cfg(not(futures_no_atomic_cas))] #[cfg(feature = "alloc")] pub use crate::abortable::{AbortHandle, AbortRegistration, Abortable, Aborted}; #[cfg(not(futures_no_atomic_cas))] #[cfg(feature = "alloc")] pub use abortable::abortable; // Just a helper function to ensure the futures we're returning all have the // right implementations. pub(crate) fn assert_future(future: F) -> F where F: Future, { future }