]> git.proxmox.com Git - rustc.git/blob - library/core/src/task/ready.rs
New upstream version 1.56.0+dfsg1
[rustc.git] / library / core / src / task / ready.rs
1 /// Extracts the successful type of a [`Poll<T>`].
2 ///
3 /// This macro bakes in propagation of [`Pending`] signals by returning early.
4 ///
5 /// [`Poll<T>`]: crate::task::Poll
6 /// [`Pending`]: crate::task::Poll::Pending
7 ///
8 /// # Examples
9 ///
10 /// ```
11 /// #![feature(ready_macro)]
12 ///
13 /// use std::task::{ready, Context, Poll};
14 /// use std::future::{self, Future};
15 /// use std::pin::Pin;
16 ///
17 /// pub fn do_poll(cx: &mut Context<'_>) -> Poll<()> {
18 /// let mut fut = future::ready(42);
19 /// let fut = Pin::new(&mut fut);
20 ///
21 /// let num = ready!(fut.poll(cx));
22 /// # drop(num);
23 /// // ... use num
24 ///
25 /// Poll::Ready(())
26 /// }
27 /// ```
28 ///
29 /// The `ready!` call expands to:
30 ///
31 /// ```
32 /// # #![feature(ready_macro)]
33 /// # use std::task::{Context, Poll};
34 /// # use std::future::{self, Future};
35 /// # use std::pin::Pin;
36 /// #
37 /// # pub fn do_poll(cx: &mut Context<'_>) -> Poll<()> {
38 /// # let mut fut = future::ready(42);
39 /// # let fut = Pin::new(&mut fut);
40 /// #
41 /// let num = match fut.poll(cx) {
42 /// Poll::Ready(t) => t,
43 /// Poll::Pending => return Poll::Pending,
44 /// };
45 /// # drop(num);
46 /// # // ... use num
47 /// #
48 /// # Poll::Ready(())
49 /// # }
50 /// ```
51 #[unstable(feature = "ready_macro", issue = "70922")]
52 #[rustc_macro_transparency = "semitransparent"]
53 pub macro ready($e:expr) {
54 match $e {
55 $crate::task::Poll::Ready(t) => t,
56 $crate::task::Poll::Pending => {
57 return $crate::task::Poll::Pending;
58 }
59 }
60 }