Coverage Report

Created: 2025-08-26 07:09

/rust/registry/src/index.crates.io-6f17d22bba15001f/futures-util-0.3.31/src/future/pending.rs
Line
Count
Source (jump to first uncovered line)
1
use super::assert_future;
2
use core::marker;
3
use core::pin::Pin;
4
use futures_core::future::{FusedFuture, Future};
5
use futures_core::task::{Context, Poll};
6
7
/// Future for the [`pending()`] function.
8
#[derive(Debug)]
9
#[must_use = "futures do nothing unless you `.await` or poll them"]
10
pub struct Pending<T> {
11
    _data: marker::PhantomData<T>,
12
}
13
14
impl<T> FusedFuture for Pending<T> {
15
0
    fn is_terminated(&self) -> bool {
16
0
        true
17
0
    }
18
}
19
20
/// Creates a future which never resolves, representing a computation that never
21
/// finishes.
22
///
23
/// The returned future will forever return [`Poll::Pending`].
24
///
25
/// # Examples
26
///
27
/// ```ignore
28
/// # futures::executor::block_on(async {
29
/// use futures::future;
30
///
31
/// let future = future::pending();
32
/// let () = future.await;
33
/// unreachable!();
34
/// # });
35
/// ```
36
#[cfg_attr(docsrs, doc(alias = "never"))]
37
0
pub fn pending<T>() -> Pending<T> {
38
0
    assert_future::<T, _>(Pending { _data: marker::PhantomData })
39
0
}
40
41
impl<T> Future for Pending<T> {
42
    type Output = T;
43
44
0
    fn poll(self: Pin<&mut Self>, _: &mut Context<'_>) -> Poll<T> {
45
0
        Poll::Pending
46
0
    }
47
}
48
49
impl<T> Unpin for Pending<T> {}
50
51
impl<T> Clone for Pending<T> {
52
0
    fn clone(&self) -> Self {
53
0
        pending()
54
0
    }
55
}