diff options
Diffstat (limited to 'third_party/rust/futures-0.1.31/src/stream/poll_fn.rs')
-rw-r--r-- | third_party/rust/futures-0.1.31/src/stream/poll_fn.rs | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/third_party/rust/futures-0.1.31/src/stream/poll_fn.rs b/third_party/rust/futures-0.1.31/src/stream/poll_fn.rs new file mode 100644 index 0000000000..fbc7df0844 --- /dev/null +++ b/third_party/rust/futures-0.1.31/src/stream/poll_fn.rs @@ -0,0 +1,49 @@ +//! Definition of the `PollFn` combinator + +use {Stream, Poll}; + +/// A stream which adapts a function returning `Poll`. +/// +/// Created by the `poll_fn` function. +#[derive(Debug)] +#[must_use = "streams do nothing unless polled"] +pub struct PollFn<F> { + inner: F, +} + +/// Creates a new stream wrapping around a function returning `Poll`. +/// +/// Polling the returned stream delegates to the wrapped function. +/// +/// # Examples +/// +/// ``` +/// use futures::stream::poll_fn; +/// use futures::{Async, Poll}; +/// +/// let mut counter = 1usize; +/// +/// let read_stream = poll_fn(move || -> Poll<Option<String>, std::io::Error> { +/// if counter == 0 { return Ok(Async::Ready(None)); } +/// counter -= 1; +/// Ok(Async::Ready(Some("Hello, World!".to_owned()))) +/// }); +/// ``` +pub fn poll_fn<T, E, F>(f: F) -> PollFn<F> +where + F: FnMut() -> Poll<Option<T>, E>, +{ + PollFn { inner: f } +} + +impl<T, E, F> Stream for PollFn<F> +where + F: FnMut() -> Poll<Option<T>, E>, +{ + type Item = T; + type Error = E; + + fn poll(&mut self) -> Poll<Option<T>, E> { + (self.inner)() + } +} |