From 43a97878ce14b72f0981164f87f2e35e14151312 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 11:22:09 +0200 Subject: Adding upstream version 110.0.1. Signed-off-by: Daniel Baumann --- .../rust/futures-0.1.31/src/resultstream.rs | 46 ++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 third_party/rust/futures-0.1.31/src/resultstream.rs (limited to 'third_party/rust/futures-0.1.31/src/resultstream.rs') diff --git a/third_party/rust/futures-0.1.31/src/resultstream.rs b/third_party/rust/futures-0.1.31/src/resultstream.rs new file mode 100644 index 0000000000..23a99819bd --- /dev/null +++ b/third_party/rust/futures-0.1.31/src/resultstream.rs @@ -0,0 +1,46 @@ +// 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) + } + } +} + -- cgit v1.2.3