async_std/future/
pending.rs

1use std::future::Future;
2use std::marker::PhantomData;
3use std::pin::Pin;
4
5use crate::task::{Context, Poll};
6
7/// Never resolves to a value.
8///
9/// # Examples
10///
11/// ```
12/// # async_std::task::block_on(async {
13/// #
14/// use std::time::Duration;
15///
16/// use async_std::future;
17/// use async_std::io;
18///
19/// let dur = Duration::from_secs(1);
20/// let fut = future::pending();
21///
22/// let res: io::Result<()> = io::timeout(dur, fut).await;
23/// assert!(res.is_err());
24/// #
25/// # })
26/// ```
27pub async fn pending<T>() -> T {
28    let fut = Pending {
29        _marker: PhantomData,
30    };
31    fut.await
32}
33
34struct Pending<T> {
35    _marker: PhantomData<T>,
36}
37
38impl<T> Future for Pending<T> {
39    type Output = T;
40
41    fn poll(self: Pin<&mut Self>, _: &mut Context<'_>) -> Poll<T> {
42        Poll::Pending
43    }
44}