summaryrefslogtreecommitdiffstats
path: root/tokio/src/future/pending.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tokio/src/future/pending.rs')
-rw-r--r--tokio/src/future/pending.rs44
1 files changed, 44 insertions, 0 deletions
diff --git a/tokio/src/future/pending.rs b/tokio/src/future/pending.rs
new file mode 100644
index 00000000..c844ebc3
--- /dev/null
+++ b/tokio/src/future/pending.rs
@@ -0,0 +1,44 @@
+use std::future::Future;
+use std::marker;
+use sdt::pin::Pin;
+use std::task::{Context, Poll};
+
+/// Future for the [`pending()`] function.
+#[derive(Debug)]
+#[must_use = "futures do nothing unless you `.await` or poll them"]
+struct Pending<T> {
+ _data: marker::PhantomData<T>,
+}
+
+/// Creates a future which never resolves, representing a computation that never
+/// finishes.
+///
+/// The returned future will forever return [`Poll::Pending`].
+///
+/// # Examples
+///
+/// ```no_run
+/// use tokio::future;
+///
+/// #[tokio::main]
+/// async fn main {
+/// future::pending().await;
+/// unreachable!();
+/// }
+/// ```
+pub async fn pending() -> ! {
+ Pending {
+ _data: marker::PhantomData,
+ }.await
+}
+
+impl<T> Future for Pending<T> {
+ type Output = !;
+
+ fn poll(self: Pin<&mut Self>, _: &mut Context<'_>) -> Poll<T> {
+ Poll::Pending
+ }
+}
+
+impl<T> Unpin for Pending<T> {
+}