// This should really be in the stream module, // but `pub(crate)` isn't available until Rust 1.18, // and pre-1.18 there isn't a really good way to have a sub-module // available to the crate, but not without it. use core::marker::PhantomData; use {Poll, Async}; use stream::Stream; /// A stream combinator used to convert a `Stream` /// to a `Stream>`. /// /// A poll on this stream will never return an `Err`. As such the /// actual error type is parameterized, so it can match whatever error /// type is needed. /// /// This structure is produced by the `Stream::results` method. #[derive(Debug)] #[must_use = "streams do nothing unless polled"] pub struct Results { inner: S, phantom: PhantomData } pub fn new(s: S) -> Results where S: Stream { Results { inner: s, phantom: PhantomData } } impl Stream for Results { type Item = Result; type Error = E; fn poll(&mut self) -> Poll>, E> { match self.inner.poll() { Ok(Async::Ready(Some(item))) => Ok(Async::Ready(Some(Ok(item)))), Err(e) => Ok(Async::Ready(Some(Err(e)))), Ok(Async::Ready(None)) => Ok(Async::Ready(None)), Ok(Async::NotReady) => Ok(Async::NotReady) } } }