| use crate::fmt::{self, Debug}; |
| use crate::future::Future; |
| use crate::marker; |
| use crate::pin::Pin; |
| use crate::task::{Context, Poll}; |
| |
| /// Creates a future which never resolves, representing a computation that never |
| /// finishes. |
| /// |
| /// This `struct` is created by [`pending()`]. See its |
| /// documentation for more. |
| #[stable(feature = "future_readiness_fns", since = "1.48.0")] |
| #[must_use = "futures do nothing unless you `.await` or poll them"] |
| pub struct Pending<T> { |
| _data: marker::PhantomData<fn() -> T>, |
| } |
| |
| /// Creates a future which never resolves, representing a computation that never |
| /// finishes. |
| /// |
| /// # Examples |
| /// |
| /// ```no_run |
| /// use std::future; |
| /// |
| /// # async fn run() { |
| /// let future = future::pending(); |
| /// let () = future.await; |
| /// unreachable!(); |
| /// # } |
| /// ``` |
| #[stable(feature = "future_readiness_fns", since = "1.48.0")] |
| pub fn pending<T>() -> Pending<T> { |
| Pending { _data: marker::PhantomData } |
| } |
| |
| #[stable(feature = "future_readiness_fns", since = "1.48.0")] |
| impl<T> Future for Pending<T> { |
| type Output = T; |
| |
| fn poll(self: Pin<&mut Self>, _: &mut Context<'_>) -> Poll<T> { |
| Poll::Pending |
| } |
| } |
| |
| #[stable(feature = "future_readiness_fns", since = "1.48.0")] |
| impl<T> Debug for Pending<T> { |
| fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { |
| f.debug_struct("Pending").finish() |
| } |
| } |
| |
| #[stable(feature = "future_readiness_fns", since = "1.48.0")] |
| impl<T> Clone for Pending<T> { |
| fn clone(&self) -> Self { |
| pending() |
| } |
| } |