use crate::future::FutureExt; use core::pin::Pin; use futures_core::future::Future; use futures_core::task::{Context, Poll}; /// A macro which returns the result of polling a future once within the /// current `async` context. /// /// This macro is only usable inside of `async` functions, closures, and blocks. /// It is also gated behind the `async-await` feature of this library, which is /// activated by default. /// /// If you need the result of polling a [`Stream`](crate::stream::Stream), /// you can use this macro with the [`next`](crate::stream::StreamExt::next) method: /// `poll!(stream.next())`. #[macro_export] macro_rules! poll { ($x:expr $(,)?) => { $crate::__private::async_await::poll($x).await }; } #[doc(hidden)] pub fn poll(future: F) -> PollOnce { PollOnce { future } } #[allow(missing_debug_implementations)] #[doc(hidden)] pub struct PollOnce { future: F, } impl Future for PollOnce { type Output = Poll; fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll { Poll::Ready(self.future.poll_unpin(cx)) } }