Sha256: 8e54bf57d60e01d496ae31df35e0b96868f4bda504c024a14f51ab723d67885f
Contents?: true
Size: 1.36 KB
Versions: 27
Compression:
Stored size: 1.36 KB
Contents
//! Definition of the `PollFn` adapter combinator use super::assert_future; use core::fmt; use core::pin::Pin; use futures_core::future::Future; use futures_core::task::{Context, Poll}; /// Future for the [`poll_fn`] function. #[must_use = "futures do nothing unless you `.await` or poll them"] pub struct PollFn<F> { f: F, } impl<F> Unpin for PollFn<F> {} /// Creates a new future wrapping around a function returning [`Poll`]. /// /// Polling the returned future delegates to the wrapped function. /// /// # Examples /// /// ``` /// # futures::executor::block_on(async { /// use futures::future::poll_fn; /// use futures::task::{Context, Poll}; /// /// fn read_line(_cx: &mut Context<'_>) -> Poll<String> { /// Poll::Ready("Hello, World!".into()) /// } /// /// let read_future = poll_fn(read_line); /// assert_eq!(read_future.await, "Hello, World!".to_owned()); /// # }); /// ``` pub fn poll_fn<T, F>(f: F) -> PollFn<F> where F: FnMut(&mut Context<'_>) -> Poll<T>, { assert_future::<T, _>(PollFn { f }) } impl<F> fmt::Debug for PollFn<F> { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { f.debug_struct("PollFn").finish() } } impl<T, F> Future for PollFn<F> where F: FnMut(&mut Context<'_>) -> Poll<T>, { type Output = T; fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<T> { (&mut self.f)(cx) } }
Version data entries
27 entries across 27 versions & 1 rubygems