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 { _data: marker::PhantomData 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() -> Pending { Pending { _data: marker::PhantomData } } #[stable(feature = "future_readiness_fns", since = "1.48.0")] impl Future for Pending { type Output = T; fn poll(self: Pin<&mut Self>, _: &mut Context<'_>) -> Poll { Poll::Pending } } #[stable(feature = "future_readiness_fns", since = "1.48.0")] impl Debug for Pending { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { f.debug_struct("Pending").finish() } } #[stable(feature = "future_readiness_fns", since = "1.48.0")] impl Clone for Pending { fn clone(&self) -> Self { pending() } }