futures_util/future/
mod.rs

1//! Asynchronous values.
2//!
3//! This module contains:
4//!
5//! - The [`Future`] trait.
6//! - The [`FutureExt`] and [`TryFutureExt`] trait, which provides adapters for
7//!   chaining and composing futures.
8//! - Top-level future combinators like [`lazy`](lazy()) which creates a future
9//!   from a closure that defines its return value, and [`ready`](ready()),
10//!   which constructs a future with an immediate defined value.
11
12#[doc(no_inline)]
13pub use core::future::Future;
14
15#[cfg(feature = "alloc")]
16pub use futures_core::future::{BoxFuture, LocalBoxFuture};
17pub use futures_core::future::{FusedFuture, TryFuture};
18pub use futures_task::{FutureObj, LocalFutureObj, UnsafeFutureObj};
19
20// Extension traits and combinators
21#[allow(clippy::module_inception)]
22mod future;
23pub use self::future::{
24    Flatten, Fuse, FutureExt, Inspect, IntoStream, Map, MapInto, NeverError, Then, UnitError,
25};
26
27#[deprecated(note = "This is now an alias for [Flatten](Flatten)")]
28pub use self::future::FlattenStream;
29
30#[cfg(feature = "std")]
31pub use self::future::CatchUnwind;
32
33#[cfg(feature = "channel")]
34#[cfg_attr(docsrs, doc(cfg(feature = "channel")))]
35#[cfg(feature = "std")]
36pub use self::future::{Remote, RemoteHandle};
37
38#[cfg(feature = "std")]
39pub use self::future::{Shared, WeakShared};
40
41mod try_future;
42pub use self::try_future::{
43    AndThen, ErrInto, InspectErr, InspectOk, IntoFuture, MapErr, MapOk, MapOkOrElse, OkInto,
44    OrElse, TryFlatten, TryFlattenStream, TryFutureExt, UnwrapOrElse,
45};
46
47#[cfg(feature = "sink")]
48#[cfg_attr(docsrs, doc(cfg(feature = "sink")))]
49pub use self::try_future::FlattenSink;
50
51// Primitive futures
52
53mod lazy;
54pub use self::lazy::{lazy, Lazy};
55
56mod pending;
57pub use self::pending::{pending, Pending};
58
59mod maybe_done;
60pub use self::maybe_done::{maybe_done, MaybeDone};
61
62mod try_maybe_done;
63pub use self::try_maybe_done::{try_maybe_done, TryMaybeDone};
64
65mod option;
66pub use self::option::OptionFuture;
67
68mod poll_fn;
69pub use self::poll_fn::{poll_fn, PollFn};
70
71mod poll_immediate;
72pub use self::poll_immediate::{poll_immediate, PollImmediate};
73
74mod ready;
75pub use self::ready::{err, ok, ready, Ready};
76
77mod always_ready;
78pub use self::always_ready::{always_ready, AlwaysReady};
79
80mod join;
81pub use self::join::{join, join3, join4, join5, Join, Join3, Join4, Join5};
82
83#[cfg(feature = "alloc")]
84mod join_all;
85#[cfg(feature = "alloc")]
86pub use self::join_all::{join_all, JoinAll};
87
88mod select;
89pub use self::select::{select, Select};
90
91#[cfg(feature = "alloc")]
92mod select_all;
93#[cfg(feature = "alloc")]
94pub use self::select_all::{select_all, SelectAll};
95
96mod try_join;
97pub use self::try_join::{
98    try_join, try_join3, try_join4, try_join5, TryJoin, TryJoin3, TryJoin4, TryJoin5,
99};
100
101#[cfg(feature = "alloc")]
102mod try_join_all;
103#[cfg(feature = "alloc")]
104pub use self::try_join_all::{try_join_all, TryJoinAll};
105
106mod try_select;
107pub use self::try_select::{try_select, TrySelect};
108
109#[cfg(feature = "alloc")]
110mod select_ok;
111#[cfg(feature = "alloc")]
112pub use self::select_ok::{select_ok, SelectOk};
113
114mod either;
115pub use self::either::Either;
116
117#[cfg_attr(target_os = "none", cfg(target_has_atomic = "ptr"))]
118#[cfg(feature = "alloc")]
119mod abortable;
120#[cfg_attr(target_os = "none", cfg(target_has_atomic = "ptr"))]
121#[cfg(feature = "alloc")]
122pub use crate::abortable::{AbortHandle, AbortRegistration, Abortable, Aborted};
123#[cfg_attr(target_os = "none", cfg(target_has_atomic = "ptr"))]
124#[cfg(feature = "alloc")]
125pub use abortable::abortable;
126
127// Just a helper function to ensure the futures we're returning all have the
128// right implementations.
129pub(crate) fn assert_future<T, F>(future: F) -> F
130where
131    F: Future<Output = T>,
132{
133    future
134}