mirror of
https://github.com/OMGeeky/google-apis-rs.git
synced 2026-01-26 19:58:50 +01:00
774 lines
204 KiB
HTML
774 lines
204 KiB
HTML
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="API documentation for the Rust `StreamExt` trait in crate `futures`."><meta name="keywords" content="rust, rustlang, rust-lang, StreamExt"><title>futures::stream::StreamExt - Rust</title><link rel="stylesheet" type="text/css" href="../../normalize.css"><link rel="stylesheet" type="text/css" href="../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../../ayu.css" disabled ><script id="default-settings"></script><script src="../../storage.js"></script><noscript><link rel="stylesheet" href="../../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../../favicon.svg">
|
||
<link rel="alternate icon" type="image/png" href="../../favicon-16x16.png">
|
||
<link rel="alternate icon" type="image/png" href="../../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../../down-arrow.svg");}</style></head><body class="rustdoc trait"><!--[if lte IE 8]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu">☰</div><a href='../../futures/index.html'><div class='logo-container rust-logo'><img src='../../rust-logo.png' alt='logo'></div></a><p class="location">Trait StreamExt</p><div class="sidebar-elems"><div class="block items"><a class="sidebar-title" href="#provided-methods">Provided Methods</a><div class="sidebar-links"><a href="#method.concat">concat</a><a href="#method.map">map</a><a href="#method.next">next</a><a href="#method.boxed">boxed</a><a href="#method.buffered">buffered</a><a href="#method.chain">chain</a><a href="#method.split">split</a><a href="#method.take">take</a><a href="#method.cycle">cycle</a><a href="#method.enumerate">enumerate</a><a href="#method.filter">filter</a><a href="#method.filter_map">filter_map</a><a href="#method.flatten">flatten</a><a href="#method.fuse">fuse</a><a href="#method.inspect">inspect</a><a href="#method.peekable">peekable</a><a href="#method.scan">scan</a><a href="#method.skip">skip</a><a href="#method.skip_while">skip_while</a><a href="#method.take_while">take_while</a><a href="#method.zip">zip</a><a href="#method.collect">collect</a><a href="#method.into_future">into_future</a><a href="#method.catch_unwind">catch_unwind</a><a href="#method.unzip">unzip</a><a href="#method.fold">fold</a><a href="#method.forward">forward</a><a href="#method.for_each">for_each</a><a href="#method.select_next_some">select_next_some</a><a href="#method.take_until">take_until</a><a href="#method.then">then</a><a href="#method.chunks">chunks</a><a href="#method.ready_chunks">ready_chunks</a><a href="#method.buffer_unordered">buffer_unordered</a><a href="#method.for_each_concurrent">for_each_concurrent</a><a href="#method.boxed_local">boxed_local</a><a href="#method.flat_map">flat_map</a><a href="#method.by_ref">by_ref</a><a href="#method.left_stream">left_stream</a><a href="#method.right_stream">right_stream</a><a href="#method.poll_next_unpin">poll_next_unpin</a></div><a class="sidebar-title" href="#implementors">Implementors</a></div><p class="location"><a href="../index.html">futures</a>::<wbr><a href="index.html">stream</a></p><div id="sidebar-vars" data-name="StreamExt" data-ty="trait" data-relpath=""></div><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><script src="../../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"></div><button type="button" class="help-button">?</button>
|
||
<a id="settings-menu" href="../../settings.html"><img src="../../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><span class="in-band">Trait <a href="../index.html">futures</a>::<wbr><a href="index.html">stream</a>::<wbr><a class="trait" href="">StreamExt</a></span><span class="out-of-band"><span id="render-detail"><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">−</span>]</a></span><a class="srclink" href="../../src/futures_util/stream/stream/mod.rs.html#212-1472" title="goto source code">[src]</a></span></h1><div class="docblock type-decl hidden-by-usual-hider"><pre class="rust trait">pub trait StreamExt: <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a> {
|
||
pub fn <a href="#method.next" class="fnname">next</a>(&mut self) -> <a class="struct" href="../../futures/stream/struct.Next.html" title="struct futures::stream::Next">Next</a><'_, Self><span class="notable-traits"><span class="notable-traits-tooltip">ⓘ<div class="notable-traits-tooltiptext"><span class="docblock"><h3 class="notable">Notable traits for <a class="struct" href="../../futures/stream/struct.Next.html" title="struct futures::stream::Next">Next</a><'_, St></h3><code class="content"><span class="where fmt-newline">impl<'_, St> <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a> for <a class="struct" href="../../futures/stream/struct.Next.html" title="struct futures::stream::Next">Next</a><'_, St> <span class="where fmt-newline">where<br> St: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a> + <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a> + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>, </span></span><span class="where fmt-newline"> type <a href="../../futures/future/trait.Future.html#associatedtype.Output" class="type">Output</a> = <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<St as <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a>>::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>>;</span></code></span></div></span></span><br> <span class="where">where<br> Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a></span>,
|
||
{ ... }
|
||
<div class="item-spacer"></div> pub fn <a href="#method.into_future" class="fnname">into_future</a>(self) -> <a class="struct" href="../../futures/stream/struct.StreamFuture.html" title="struct futures::stream::StreamFuture">StreamFuture</a><Self><span class="notable-traits"><span class="notable-traits-tooltip">ⓘ<div class="notable-traits-tooltiptext"><span class="docblock"><h3 class="notable">Notable traits for <a class="struct" href="../../futures/stream/struct.StreamFuture.html" title="struct futures::stream::StreamFuture">StreamFuture</a><St></h3><code class="content"><span class="where fmt-newline">impl<St> <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a> for <a class="struct" href="../../futures/stream/struct.StreamFuture.html" title="struct futures::stream::StreamFuture">StreamFuture</a><St> <span class="where fmt-newline">where<br> St: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a> + <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a>, </span></span><span class="where fmt-newline"> type <a href="../../futures/future/trait.Future.html#associatedtype.Output" class="type">Output</a> = <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">(</a><a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<St as <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a>>::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>>, St<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">)</a>;</span></code></span></div></span></span><br> <span class="where">where<br> Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a></span>,
|
||
{ ... }
|
||
<div class="item-spacer"></div> pub fn <a href="#method.map" class="fnname">map</a><T, F>(self, f: F) -> <a class="struct" href="../../futures/stream/struct.Map.html" title="struct futures::stream::Map">Map</a><Self, F><br> <span class="where">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>) -> T</span>,
|
||
{ ... }
|
||
<div class="item-spacer"></div> pub fn <a href="#method.enumerate" class="fnname">enumerate</a>(self) -> <a class="struct" href="../../futures/stream/struct.Enumerate.html" title="struct futures::stream::Enumerate">Enumerate</a><Self> { ... }
|
||
<div class="item-spacer"></div> pub fn <a href="#method.filter" class="fnname">filter</a><Fut, F>(self, f: F) -> <a class="struct" href="../../futures/stream/struct.Filter.html" title="struct futures::stream::Filter">Filter</a><Self, Fut, F><br> <span class="where">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(&Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>) -> Fut,<br> Fut: <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a><Output = <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>></span>,
|
||
{ ... }
|
||
<div class="item-spacer"></div> pub fn <a href="#method.filter_map" class="fnname">filter_map</a><Fut, T, F>(self, f: F) -> <a class="struct" href="../../futures/stream/struct.FilterMap.html" title="struct futures::stream::FilterMap">FilterMap</a><Self, Fut, F><br> <span class="where">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>) -> Fut,<br> Fut: <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a><Output = <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><T>></span>,
|
||
{ ... }
|
||
<div class="item-spacer"></div> pub fn <a href="#method.then" class="fnname">then</a><Fut, F>(self, f: F) -> <a class="struct" href="../../futures/stream/struct.Then.html" title="struct futures::stream::Then">Then</a><Self, Fut, F><br> <span class="where">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>) -> Fut,<br> Fut: <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a></span>,
|
||
{ ... }
|
||
<div class="item-spacer"></div> pub fn <a href="#method.collect" class="fnname">collect</a><C>(self) -> <a class="struct" href="../../futures/stream/struct.Collect.html" title="struct futures::stream::Collect">Collect</a><Self, C><span class="notable-traits"><span class="notable-traits-tooltip">ⓘ<div class="notable-traits-tooltiptext"><span class="docblock"><h3 class="notable">Notable traits for <a class="struct" href="../../futures/stream/struct.Collect.html" title="struct futures::stream::Collect">Collect</a><St, C></h3><code class="content"><span class="where fmt-newline">impl<St, C> <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a> for <a class="struct" href="../../futures/stream/struct.Collect.html" title="struct futures::stream::Collect">Collect</a><St, C> <span class="where fmt-newline">where<br> C: <a class="trait" href="https://doc.rust-lang.org/nightly/core/default/trait.Default.html" title="trait core::default::Default">Default</a> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.Extend.html" title="trait core::iter::traits::collect::Extend">Extend</a><<St as <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a>>::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>>,<br> St: <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a>, </span></span><span class="where fmt-newline"> type <a href="../../futures/future/trait.Future.html#associatedtype.Output" class="type">Output</a> = C;</span></code></span></div></span></span><br> <span class="where">where<br> C: <a class="trait" href="https://doc.rust-lang.org/nightly/core/default/trait.Default.html" title="trait core::default::Default">Default</a> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.Extend.html" title="trait core::iter::traits::collect::Extend">Extend</a><Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>></span>,
|
||
{ ... }
|
||
<div class="item-spacer"></div> pub fn <a href="#method.unzip" class="fnname">unzip</a><A, B, FromA, FromB>(self) -> <a class="struct" href="../../futures/stream/struct.Unzip.html" title="struct futures::stream::Unzip">Unzip</a><Self, FromA, FromB><span class="notable-traits"><span class="notable-traits-tooltip">ⓘ<div class="notable-traits-tooltiptext"><span class="docblock"><h3 class="notable">Notable traits for <a class="struct" href="../../futures/stream/struct.Unzip.html" title="struct futures::stream::Unzip">Unzip</a><St, FromA, FromB></h3><code class="content"><span class="where fmt-newline">impl<St, A, B, FromA, FromB> <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a> for <a class="struct" href="../../futures/stream/struct.Unzip.html" title="struct futures::stream::Unzip">Unzip</a><St, FromA, FromB> <span class="where fmt-newline">where<br> St: <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a><Item = <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">(</a>A, B<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">)</a>>,<br> FromA: <a class="trait" href="https://doc.rust-lang.org/nightly/core/default/trait.Default.html" title="trait core::default::Default">Default</a> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.Extend.html" title="trait core::iter::traits::collect::Extend">Extend</a><A>,<br> FromB: <a class="trait" href="https://doc.rust-lang.org/nightly/core/default/trait.Default.html" title="trait core::default::Default">Default</a> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.Extend.html" title="trait core::iter::traits::collect::Extend">Extend</a><B>, </span></span><span class="where fmt-newline"> type <a href="../../futures/future/trait.Future.html#associatedtype.Output" class="type">Output</a> = <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">(</a>FromA, FromB<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">)</a>;</span></code></span></div></span></span><br> <span class="where">where<br> Self: <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a><Item = <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">(</a>A, B<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">)</a>>,<br> FromA: <a class="trait" href="https://doc.rust-lang.org/nightly/core/default/trait.Default.html" title="trait core::default::Default">Default</a> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.Extend.html" title="trait core::iter::traits::collect::Extend">Extend</a><A>,<br> FromB: <a class="trait" href="https://doc.rust-lang.org/nightly/core/default/trait.Default.html" title="trait core::default::Default">Default</a> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.Extend.html" title="trait core::iter::traits::collect::Extend">Extend</a><B></span>,
|
||
{ ... }
|
||
<div class="item-spacer"></div> pub fn <a href="#method.concat" class="fnname">concat</a>(self) -> <a class="struct" href="../../futures/stream/struct.Concat.html" title="struct futures::stream::Concat">Concat</a><Self><span class="notable-traits"><span class="notable-traits-tooltip">ⓘ<div class="notable-traits-tooltiptext"><span class="docblock"><h3 class="notable">Notable traits for <a class="struct" href="../../futures/stream/struct.Concat.html" title="struct futures::stream::Concat">Concat</a><St></h3><code class="content"><span class="where fmt-newline">impl<St> <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a> for <a class="struct" href="../../futures/stream/struct.Concat.html" title="struct futures::stream::Concat">Concat</a><St> <span class="where fmt-newline">where<br> St: <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a>,<br> <St as <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a>>::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>: <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.Extend.html" title="trait core::iter::traits::collect::Extend">Extend</a><<<St as <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a>>::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a> as <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html" title="trait core::iter::traits::collect::IntoIterator">IntoIterator</a>>::<a class="type" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html#associatedtype.Item" title="type core::iter::traits::collect::IntoIterator::Item">Item</a>>,<br> <St as <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a>>::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>: <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html" title="trait core::iter::traits::collect::IntoIterator">IntoIterator</a>,<br> <St as <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a>>::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>: <a class="trait" href="https://doc.rust-lang.org/nightly/core/default/trait.Default.html" title="trait core::default::Default">Default</a>, </span></span><span class="where fmt-newline"> type <a href="../../futures/future/trait.Future.html#associatedtype.Output" class="type">Output</a> = <St as <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a>>::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>;</span></code></span></div></span></span><br> <span class="where">where<br> Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>: <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.Extend.html" title="trait core::iter::traits::collect::Extend">Extend</a><<Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a> as <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html" title="trait core::iter::traits::collect::IntoIterator">IntoIterator</a>>::<a class="type" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html#associatedtype.Item" title="type core::iter::traits::collect::IntoIterator::Item">Item</a>>,<br> Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>: <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html" title="trait core::iter::traits::collect::IntoIterator">IntoIterator</a>,<br> Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>: <a class="trait" href="https://doc.rust-lang.org/nightly/core/default/trait.Default.html" title="trait core::default::Default">Default</a></span>,
|
||
{ ... }
|
||
<div class="item-spacer"></div> pub fn <a href="#method.cycle" class="fnname">cycle</a>(self) -> <a class="struct" href="../../futures/stream/struct.Cycle.html" title="struct futures::stream::Cycle">Cycle</a><Self><br> <span class="where">where<br> Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a></span>,
|
||
{ ... }
|
||
<div class="item-spacer"></div> pub fn <a href="#method.fold" class="fnname">fold</a><T, Fut, F>(self, init: T, f: F) -> <a class="struct" href="../../futures/stream/struct.Fold.html" title="struct futures::stream::Fold">Fold</a><Self, Fut, T, F><span class="notable-traits"><span class="notable-traits-tooltip">ⓘ<div class="notable-traits-tooltiptext"><span class="docblock"><h3 class="notable">Notable traits for <a class="struct" href="../../futures/stream/struct.Fold.html" title="struct futures::stream::Fold">Fold</a><St, Fut, T, F></h3><code class="content"><span class="where fmt-newline">impl<St, Fut, T, F> <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a> for <a class="struct" href="../../futures/stream/struct.Fold.html" title="struct futures::stream::Fold">Fold</a><St, Fut, T, F> <span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(T, <St as <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a>>::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>) -> Fut,<br> Fut: <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a><Output = T>,<br> St: <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a>, </span></span><span class="where fmt-newline"> type <a href="../../futures/future/trait.Future.html#associatedtype.Output" class="type">Output</a> = T;</span></code></span></div></span></span><br> <span class="where">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(T, Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>) -> Fut,<br> Fut: <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a><Output = T></span>,
|
||
{ ... }
|
||
<div class="item-spacer"></div> pub fn <a href="#method.flatten" class="fnname">flatten</a>(self) -> <a class="struct" href="../../futures/stream/struct.Flatten.html" title="struct futures::stream::Flatten">Flatten</a><Self><br> <span class="where">where<br> Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>: <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a></span>,
|
||
{ ... }
|
||
<div class="item-spacer"></div> pub fn <a href="#method.flat_map" class="fnname">flat_map</a><U, F>(self, f: F) -> <a class="struct" href="../../futures/stream/struct.FlatMap.html" title="struct futures::stream::FlatMap">FlatMap</a><Self, U, F><br> <span class="where">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>) -> U,<br> U: <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a></span>,
|
||
{ ... }
|
||
<div class="item-spacer"></div> pub fn <a href="#method.scan" class="fnname">scan</a><S, B, Fut, F>(<br> self, <br> initial_state: S, <br> f: F<br> ) -> <a class="struct" href="../../futures/stream/struct.Scan.html" title="struct futures::stream::Scan">Scan</a><Self, S, Fut, F><br> <span class="where">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&mut </a>S, Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>) -> Fut,<br> Fut: <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a><Output = <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><B>></span>,
|
||
{ ... }
|
||
<div class="item-spacer"></div> pub fn <a href="#method.skip_while" class="fnname">skip_while</a><Fut, F>(self, f: F) -> <a class="struct" href="../../futures/stream/struct.SkipWhile.html" title="struct futures::stream::SkipWhile">SkipWhile</a><Self, Fut, F><br> <span class="where">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(&Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>) -> Fut,<br> Fut: <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a><Output = <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>></span>,
|
||
{ ... }
|
||
<div class="item-spacer"></div> pub fn <a href="#method.take_while" class="fnname">take_while</a><Fut, F>(self, f: F) -> <a class="struct" href="../../futures/stream/struct.TakeWhile.html" title="struct futures::stream::TakeWhile">TakeWhile</a><Self, Fut, F><br> <span class="where">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(&Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>) -> Fut,<br> Fut: <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a><Output = <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>></span>,
|
||
{ ... }
|
||
<div class="item-spacer"></div> pub fn <a href="#method.take_until" class="fnname">take_until</a><Fut>(self, fut: Fut) -> <a class="struct" href="../../futures/stream/struct.TakeUntil.html" title="struct futures::stream::TakeUntil">TakeUntil</a><Self, Fut><br> <span class="where">where<br> Fut: <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a></span>,
|
||
{ ... }
|
||
<div class="item-spacer"></div> pub fn <a href="#method.for_each" class="fnname">for_each</a><Fut, F>(self, f: F) -> <a class="struct" href="../../futures/stream/struct.ForEach.html" title="struct futures::stream::ForEach">ForEach</a><Self, Fut, F><span class="notable-traits"><span class="notable-traits-tooltip">ⓘ<div class="notable-traits-tooltiptext"><span class="docblock"><h3 class="notable">Notable traits for <a class="struct" href="../../futures/stream/struct.ForEach.html" title="struct futures::stream::ForEach">ForEach</a><St, Fut, F></h3><code class="content"><span class="where fmt-newline">impl<St, Fut, F> <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a> for <a class="struct" href="../../futures/stream/struct.ForEach.html" title="struct futures::stream::ForEach">ForEach</a><St, Fut, F> <span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<St as <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a>>::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>) -> Fut,<br> Fut: <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a><Output = <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>>,<br> St: <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a>, </span></span><span class="where fmt-newline"> type <a href="../../futures/future/trait.Future.html#associatedtype.Output" class="type">Output</a> = <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>;</span></code></span></div></span></span><br> <span class="where">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>) -> Fut,<br> Fut: <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a><Output = <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>></span>,
|
||
{ ... }
|
||
<div class="item-spacer"></div> pub fn <a href="#method.for_each_concurrent" class="fnname">for_each_concurrent</a><Fut, F>(<br> self, <br> limit: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a><<a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>>>, <br> f: F<br> ) -> <a class="struct" href="../../futures/stream/struct.ForEachConcurrent.html" title="struct futures::stream::ForEachConcurrent">ForEachConcurrent</a><Self, Fut, F><span class="notable-traits"><span class="notable-traits-tooltip">ⓘ<div class="notable-traits-tooltiptext"><span class="docblock"><h3 class="notable">Notable traits for <a class="struct" href="../../futures/stream/struct.ForEachConcurrent.html" title="struct futures::stream::ForEachConcurrent">ForEachConcurrent</a><St, Fut, F></h3><code class="content"><span class="where fmt-newline">impl<St, Fut, F> <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a> for <a class="struct" href="../../futures/stream/struct.ForEachConcurrent.html" title="struct futures::stream::ForEachConcurrent">ForEachConcurrent</a><St, Fut, F> <span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<St as <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a>>::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>) -> Fut,<br> Fut: <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a><Output = <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>>,<br> St: <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a>, </span></span><span class="where fmt-newline"> type <a href="../../futures/future/trait.Future.html#associatedtype.Output" class="type">Output</a> = <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>;</span></code></span></div></span></span><br> <span class="where">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>) -> Fut,<br> Fut: <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a><Output = <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>></span>,
|
||
{ ... }
|
||
<div class="item-spacer"></div> pub fn <a href="#method.take" class="fnname">take</a>(self, n: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -> <a class="struct" href="../../futures/stream/struct.Take.html" title="struct futures::stream::Take">Take</a><Self> { ... }
|
||
<div class="item-spacer"></div> pub fn <a href="#method.skip" class="fnname">skip</a>(self, n: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -> <a class="struct" href="../../futures/stream/struct.Skip.html" title="struct futures::stream::Skip">Skip</a><Self> { ... }
|
||
<div class="item-spacer"></div> pub fn <a href="#method.fuse" class="fnname">fuse</a>(self) -> <a class="struct" href="../../futures/stream/struct.Fuse.html" title="struct futures::stream::Fuse">Fuse</a><Self> { ... }
|
||
<div class="item-spacer"></div> pub fn <a href="#method.by_ref" class="fnname">by_ref</a>(&mut self) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&mut </a>Self<span class="notable-traits"><span class="notable-traits-tooltip">ⓘ<div class="notable-traits-tooltiptext"><span class="docblock"><h3 class="notable">Notable traits for <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&'_ mut </a>F</h3><code class="content"><span class="where fmt-newline">impl<'_, F> <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a> for <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&'_ mut </a>F <span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a> + <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a> + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>, </span></span><span class="where fmt-newline"> type <a href="../../futures/future/trait.Future.html#associatedtype.Output" class="type">Output</a> = <F as <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a>>::<a class="type" href="../../futures/future/trait.Future.html#associatedtype.Output" title="type futures::future::Future::Output">Output</a>;</span></code></span></div></span></span> { ... }
|
||
<div class="item-spacer"></div> pub fn <a href="#method.catch_unwind" class="fnname">catch_unwind</a>(self) -> <a class="struct" href="../../futures/stream/struct.CatchUnwind.html" title="struct futures::stream::CatchUnwind">CatchUnwind</a><Self><br> <span class="where">where<br> Self: <a class="trait" href="https://doc.rust-lang.org/nightly/std/panic/trait.UnwindSafe.html" title="trait std::panic::UnwindSafe">UnwindSafe</a></span>,
|
||
{ ... }
|
||
<div class="item-spacer"></div> pub fn <a href="#method.boxed" class="fnname">boxed</a><'a>(<br> self<br> ) -> <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a><<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a><dyn <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a><Item = Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>> + 'a + <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a>, <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/alloc/struct.Global.html" title="struct alloc::alloc::Global">Global</a>>><span class="notable-traits"><span class="notable-traits-tooltip">ⓘ<div class="notable-traits-tooltiptext"><span class="docblock"><h3 class="notable">Notable traits for <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a><P></h3><code class="content"><span class="where fmt-newline">impl<P> <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a> for <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a><P> <span class="where fmt-newline">where<br> P: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.DerefMut.html" title="trait core::ops::deref::DerefMut">DerefMut</a>,<br> <P as <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a>>::<a class="type" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html#associatedtype.Target" title="type core::ops::deref::Deref::Target">Target</a>: <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a>, </span></span><span class="where fmt-newline"> type <a href="../../futures/future/trait.Future.html#associatedtype.Output" class="type">Output</a> = <<P as <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a>>::<a class="type" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html#associatedtype.Target" title="type core::ops::deref::Deref::Target">Target</a> as <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a>>::<a class="type" href="../../futures/future/trait.Future.html#associatedtype.Output" title="type futures::future::Future::Output">Output</a>;</span></code></span></div></span></span><br> <span class="where">where<br> Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> + 'a</span>,
|
||
{ ... }
|
||
<div class="item-spacer"></div> pub fn <a href="#method.boxed_local" class="fnname">boxed_local</a><'a>(<br> self<br> ) -> <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a><<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a><dyn <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a><Item = Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>> + 'a, <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/alloc/struct.Global.html" title="struct alloc::alloc::Global">Global</a>>><span class="notable-traits"><span class="notable-traits-tooltip">ⓘ<div class="notable-traits-tooltiptext"><span class="docblock"><h3 class="notable">Notable traits for <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a><P></h3><code class="content"><span class="where fmt-newline">impl<P> <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a> for <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a><P> <span class="where fmt-newline">where<br> P: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.DerefMut.html" title="trait core::ops::deref::DerefMut">DerefMut</a>,<br> <P as <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a>>::<a class="type" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html#associatedtype.Target" title="type core::ops::deref::Deref::Target">Target</a>: <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a>, </span></span><span class="where fmt-newline"> type <a href="../../futures/future/trait.Future.html#associatedtype.Output" class="type">Output</a> = <<P as <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a>>::<a class="type" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html#associatedtype.Target" title="type core::ops::deref::Deref::Target">Target</a> as <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a>>::<a class="type" href="../../futures/future/trait.Future.html#associatedtype.Output" title="type futures::future::Future::Output">Output</a>;</span></code></span></div></span></span><br> <span class="where">where<br> Self: 'a</span>,
|
||
{ ... }
|
||
<div class="item-spacer"></div> pub fn <a href="#method.buffered" class="fnname">buffered</a>(self, n: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -> <a class="struct" href="../../futures/stream/struct.Buffered.html" title="struct futures::stream::Buffered">Buffered</a><Self><br> <span class="where">where<br> Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>: <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a></span>,
|
||
{ ... }
|
||
<div class="item-spacer"></div> pub fn <a href="#method.buffer_unordered" class="fnname">buffer_unordered</a>(self, n: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -> <a class="struct" href="../../futures/stream/struct.BufferUnordered.html" title="struct futures::stream::BufferUnordered">BufferUnordered</a><Self><br> <span class="where">where<br> Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>: <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a></span>,
|
||
{ ... }
|
||
<div class="item-spacer"></div> pub fn <a href="#method.zip" class="fnname">zip</a><St>(self, other: St) -> <a class="struct" href="../../futures/stream/struct.Zip.html" title="struct futures::stream::Zip">Zip</a><Self, St><br> <span class="where">where<br> St: <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a></span>,
|
||
{ ... }
|
||
<div class="item-spacer"></div> pub fn <a href="#method.chain" class="fnname">chain</a><St>(self, other: St) -> <a class="struct" href="../../futures/stream/struct.Chain.html" title="struct futures::stream::Chain">Chain</a><Self, St><br> <span class="where">where<br> St: <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a><Item = Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>></span>,
|
||
{ ... }
|
||
<div class="item-spacer"></div> pub fn <a href="#method.peekable" class="fnname">peekable</a>(self) -> <a class="struct" href="../../futures/stream/struct.Peekable.html" title="struct futures::stream::Peekable">Peekable</a><Self> { ... }
|
||
<div class="item-spacer"></div> pub fn <a href="#method.chunks" class="fnname">chunks</a>(self, capacity: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -> <a class="struct" href="../../futures/stream/struct.Chunks.html" title="struct futures::stream::Chunks">Chunks</a><Self> { ... }
|
||
<div class="item-spacer"></div> pub fn <a href="#method.ready_chunks" class="fnname">ready_chunks</a>(self, capacity: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -> <a class="struct" href="../../futures/stream/struct.ReadyChunks.html" title="struct futures::stream::ReadyChunks">ReadyChunks</a><Self> { ... }
|
||
<div class="item-spacer"></div> pub fn <a href="#method.forward" class="fnname">forward</a><S>(self, sink: S) -> <a class="struct" href="../../futures/stream/struct.Forward.html" title="struct futures::stream::Forward">Forward</a><Self, S><span class="notable-traits"><span class="notable-traits-tooltip">ⓘ<div class="notable-traits-tooltiptext"><span class="docblock"><h3 class="notable">Notable traits for <a class="struct" href="../../futures/stream/struct.Forward.html" title="struct futures::stream::Forward">Forward</a><St, Si></h3><code class="content"><span class="where fmt-newline">impl<St, Si> <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a> for <a class="struct" href="../../futures/stream/struct.Forward.html" title="struct futures::stream::Forward">Forward</a><St, Si> <span class="where fmt-newline">where<br> St: <a class="trait" href="../../futures/stream/trait.TryStream.html" title="trait futures::stream::TryStream">TryStream</a>,<br> Forward<St, Si, <St as <a class="trait" href="../../futures/stream/trait.TryStream.html" title="trait futures::stream::TryStream">TryStream</a>>::<a class="type" href="../../futures/stream/trait.TryStream.html#associatedtype.Ok" title="type futures::stream::TryStream::Ok">Ok</a>>: <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a>, </span></span><span class="where fmt-newline"> type <a href="../../futures/future/trait.Future.html#associatedtype.Output" class="type">Output</a> = <Forward<St, Si, <St as <a class="trait" href="../../futures/stream/trait.TryStream.html" title="trait futures::stream::TryStream">TryStream</a>>::<a class="type" href="../../futures/stream/trait.TryStream.html#associatedtype.Ok" title="type futures::stream::TryStream::Ok">Ok</a>> as <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a>>::<a class="type" href="../../futures/future/trait.Future.html#associatedtype.Output" title="type futures::future::Future::Output">Output</a>;</span></code></span></div></span></span><br> <span class="where">where<br> Self: <a class="trait" href="../../futures/stream/trait.TryStream.html" title="trait futures::stream::TryStream">TryStream</a>,<br> S: <a class="trait" href="../../futures/sink/trait.Sink.html" title="trait futures::sink::Sink">Sink</a><Self::<a class="type" href="../../futures/stream/trait.TryStream.html#associatedtype.Ok" title="type futures::stream::TryStream::Ok">Ok</a>, Error = Self::<a class="type" href="../../futures/stream/trait.TryStream.html#associatedtype.Error" title="type futures::stream::TryStream::Error">Error</a>></span>,
|
||
{ ... }
|
||
<div class="item-spacer"></div> pub fn <a href="#method.split" class="fnname">split</a><Item>(self) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">(</a><a class="struct" href="../../futures/stream/struct.SplitSink.html" title="struct futures::stream::SplitSink">SplitSink</a><Self, Item>, <a class="struct" href="../../futures/stream/struct.SplitStream.html" title="struct futures::stream::SplitStream">SplitStream</a><Self><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">)</a><br> <span class="where">where<br> Self: <a class="trait" href="../../futures/sink/trait.Sink.html" title="trait futures::sink::Sink">Sink</a><Item></span>,
|
||
{ ... }
|
||
<div class="item-spacer"></div> pub fn <a href="#method.inspect" class="fnname">inspect</a><F>(self, f: F) -> <a class="struct" href="../../futures/stream/struct.Inspect.html" title="struct futures::stream::Inspect">Inspect</a><Self, F><br> <span class="where">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(&Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>)</span>,
|
||
{ ... }
|
||
<div class="item-spacer"></div> pub fn <a href="#method.left_stream" class="fnname">left_stream</a><B>(self) -> <a class="enum" href="../../futures/future/enum.Either.html" title="enum futures::future::Either">Either</a><Self, B><span class="notable-traits"><span class="notable-traits-tooltip">ⓘ<div class="notable-traits-tooltiptext"><span class="docblock"><h3 class="notable">Notable traits for <a class="enum" href="../../futures/future/enum.Either.html" title="enum futures::future::Either">Either</a><A, B></h3><code class="content"><span class="where fmt-newline">impl<A, B> <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a> for <a class="enum" href="../../futures/future/enum.Either.html" title="enum futures::future::Either">Either</a><A, B> <span class="where fmt-newline">where<br> B: <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a><Output = <A as <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a>>::<a class="type" href="../../futures/future/trait.Future.html#associatedtype.Output" title="type futures::future::Future::Output">Output</a>>,<br> A: <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a>, </span></span><span class="where fmt-newline"> type <a href="../../futures/future/trait.Future.html#associatedtype.Output" class="type">Output</a> = <A as <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a>>::<a class="type" href="../../futures/future/trait.Future.html#associatedtype.Output" title="type futures::future::Future::Output">Output</a>;</span></code></span></div></span></span><br> <span class="where">where<br> B: <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a><Item = Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>></span>,
|
||
{ ... }
|
||
<div class="item-spacer"></div> pub fn <a href="#method.right_stream" class="fnname">right_stream</a><B>(self) -> <a class="enum" href="../../futures/future/enum.Either.html" title="enum futures::future::Either">Either</a><B, Self><span class="notable-traits"><span class="notable-traits-tooltip">ⓘ<div class="notable-traits-tooltiptext"><span class="docblock"><h3 class="notable">Notable traits for <a class="enum" href="../../futures/future/enum.Either.html" title="enum futures::future::Either">Either</a><A, B></h3><code class="content"><span class="where fmt-newline">impl<A, B> <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a> for <a class="enum" href="../../futures/future/enum.Either.html" title="enum futures::future::Either">Either</a><A, B> <span class="where fmt-newline">where<br> B: <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a><Output = <A as <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a>>::<a class="type" href="../../futures/future/trait.Future.html#associatedtype.Output" title="type futures::future::Future::Output">Output</a>>,<br> A: <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a>, </span></span><span class="where fmt-newline"> type <a href="../../futures/future/trait.Future.html#associatedtype.Output" class="type">Output</a> = <A as <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a>>::<a class="type" href="../../futures/future/trait.Future.html#associatedtype.Output" title="type futures::future::Future::Output">Output</a>;</span></code></span></div></span></span><br> <span class="where">where<br> B: <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a><Item = Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>></span>,
|
||
{ ... }
|
||
<div class="item-spacer"></div> pub fn <a href="#method.poll_next_unpin" class="fnname">poll_next_unpin</a>(<br> &mut self, <br> cx: &mut <a class="struct" href="../../futures/task/struct.Context.html" title="struct futures::task::Context">Context</a><'_><br> ) -> <a class="enum" href="../../futures/task/enum.Poll.html" title="enum futures::task::Poll">Poll</a><<a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>>><br> <span class="where">where<br> Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a></span>,
|
||
{ ... }
|
||
<div class="item-spacer"></div> pub fn <a href="#method.select_next_some" class="fnname">select_next_some</a>(&mut self) -> <a class="struct" href="../../futures/stream/struct.SelectNextSome.html" title="struct futures::stream::SelectNextSome">SelectNextSome</a><'_, Self><span class="notable-traits"><span class="notable-traits-tooltip">ⓘ<div class="notable-traits-tooltiptext"><span class="docblock"><h3 class="notable">Notable traits for <a class="struct" href="../../futures/stream/struct.SelectNextSome.html" title="struct futures::stream::SelectNextSome">SelectNextSome</a><'_, St></h3><code class="content"><span class="where fmt-newline">impl<'_, St> <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a> for <a class="struct" href="../../futures/stream/struct.SelectNextSome.html" title="struct futures::stream::SelectNextSome">SelectNextSome</a><'_, St> <span class="where fmt-newline">where<br> St: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a> + <a class="trait" href="../../futures/stream/trait.FusedStream.html" title="trait futures::stream::FusedStream">FusedStream</a> + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>, </span></span><span class="where fmt-newline"> type <a href="../../futures/future/trait.Future.html#associatedtype.Output" class="type">Output</a> = <St as <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a>>::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>;</span></code></span></div></span></span><br> <span class="where">where<br> Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a> + <a class="trait" href="../../futures/stream/trait.FusedStream.html" title="trait futures::stream::FusedStream">FusedStream</a></span>,
|
||
{ ... }
|
||
}</pre></div><div class="docblock"><p>An extension trait for <code>Stream</code>s that provides a variety of convenient
|
||
combinator functions.</p>
|
||
</div><h2 id="provided-methods" class="small-section-header">Provided methods<a href="#provided-methods" class="anchor"></a></h2><div class="methods"><h3 id="method.next" class="method"><code>pub fn <a href="#method.next" class="fnname">next</a>(&mut self) -> <a class="struct" href="../../futures/stream/struct.Next.html" title="struct futures::stream::Next">Next</a><'_, Self><span class="notable-traits"><span class="notable-traits-tooltip">ⓘ<div class="notable-traits-tooltiptext"><span class="docblock"><h3 class="notable">Notable traits for <a class="struct" href="../../futures/stream/struct.Next.html" title="struct futures::stream::Next">Next</a><'_, St></h3><code class="content"><span class="where fmt-newline">impl<'_, St> <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a> for <a class="struct" href="../../futures/stream/struct.Next.html" title="struct futures::stream::Next">Next</a><'_, St> <span class="where fmt-newline">where<br> St: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a> + <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a> + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>, </span></span><span class="where fmt-newline"> type <a href="../../futures/future/trait.Future.html#associatedtype.Output" class="type">Output</a> = <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<St as <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a>>::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>>;</span></code></span></div></span></span> <span class="where fmt-newline">where<br> Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>, </span></code><a class="srclink" href="../../src/futures_util/stream/stream/mod.rs.html#236-238" title="goto source code">[src]</a></h3><div class="docblock"><p>Creates a future that resolves to the next item in the stream.</p>
|
||
<p>Note that because <code>next</code> doesn't take ownership over the stream,
|
||
the <a href="../../futures/stream/trait.Stream.html" title="Stream"><code>Stream</code></a> type must be <a href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html" title="Unpin"><code>Unpin</code></a>. If you want to use <code>next</code> with a
|
||
<a href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html"><code>!Unpin</code></a> stream, you'll first have to pin the stream. This can
|
||
be done by boxing the stream using <a href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html#method.pin" title="Box::pin"><code>Box::pin</code></a> or
|
||
pinning it to the stack using the <code>pin_mut!</code> macro from the <code>pin_utils</code>
|
||
crate.</p>
|
||
<h1 id="examples" class="section-header"><a href="#examples">Examples</a></h1>
|
||
<div class="example-wrap"><pre class="rust rust-example-rendered">
|
||
<span class="kw">use</span> <span class="ident">futures</span>::<span class="ident">stream</span>::{<span class="self">self</span>, <span class="ident">StreamExt</span>};
|
||
|
||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">stream</span> <span class="op">=</span> <span class="ident">stream</span>::<span class="ident">iter</span>(<span class="number">1</span>..<span class="op">=</span><span class="number">3</span>);
|
||
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">stream</span>.<span class="ident">next</span>().<span class="kw">await</span>, <span class="prelude-val">Some</span>(<span class="number">1</span>));
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">stream</span>.<span class="ident">next</span>().<span class="kw">await</span>, <span class="prelude-val">Some</span>(<span class="number">2</span>));
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">stream</span>.<span class="ident">next</span>().<span class="kw">await</span>, <span class="prelude-val">Some</span>(<span class="number">3</span>));
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">stream</span>.<span class="ident">next</span>().<span class="kw">await</span>, <span class="prelude-val">None</span>);</pre></div>
|
||
</div><h3 id="method.into_future" class="method"><code>pub fn <a href="#method.into_future" class="fnname">into_future</a>(self) -> <a class="struct" href="../../futures/stream/struct.StreamFuture.html" title="struct futures::stream::StreamFuture">StreamFuture</a><Self><span class="notable-traits"><span class="notable-traits-tooltip">ⓘ<div class="notable-traits-tooltiptext"><span class="docblock"><h3 class="notable">Notable traits for <a class="struct" href="../../futures/stream/struct.StreamFuture.html" title="struct futures::stream::StreamFuture">StreamFuture</a><St></h3><code class="content"><span class="where fmt-newline">impl<St> <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a> for <a class="struct" href="../../futures/stream/struct.StreamFuture.html" title="struct futures::stream::StreamFuture">StreamFuture</a><St> <span class="where fmt-newline">where<br> St: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a> + <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a>, </span></span><span class="where fmt-newline"> type <a href="../../futures/future/trait.Future.html#associatedtype.Output" class="type">Output</a> = <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">(</a><a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<St as <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a>>::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>>, St<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">)</a>;</span></code></span></div></span></span> <span class="where fmt-newline">where<br> Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>, </span></code><a class="srclink" href="../../src/futures_util/stream/stream/mod.rs.html#271-273" title="goto source code">[src]</a></h3><div class="docblock"><p>Converts this stream into a future of <code>(next_item, tail_of_stream)</code>.
|
||
If the stream terminates, then the next item is <a href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html#variant.None" title="None"><code>None</code></a>.</p>
|
||
<p>The returned future can be used to compose streams and futures together
|
||
by placing everything into the "world of futures".</p>
|
||
<p>Note that because <code>into_future</code> moves the stream, the <a href="../../futures/stream/trait.Stream.html" title="Stream"><code>Stream</code></a> type
|
||
must be <a href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html" title="Unpin"><code>Unpin</code></a>. If you want to use <code>into_future</code> with a
|
||
<a href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html"><code>!Unpin</code></a> stream, you'll first have to pin the stream. This can
|
||
be done by boxing the stream using <a href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html#method.pin" title="Box::pin"><code>Box::pin</code></a> or
|
||
pinning it to the stack using the <code>pin_mut!</code> macro from the <code>pin_utils</code>
|
||
crate.</p>
|
||
<h1 id="examples-1" class="section-header"><a href="#examples-1">Examples</a></h1>
|
||
<div class="example-wrap"><pre class="rust rust-example-rendered">
|
||
<span class="kw">use</span> <span class="ident">futures</span>::<span class="ident">stream</span>::{<span class="self">self</span>, <span class="ident">StreamExt</span>};
|
||
|
||
<span class="kw">let</span> <span class="ident">stream</span> <span class="op">=</span> <span class="ident">stream</span>::<span class="ident">iter</span>(<span class="number">1</span>..<span class="op">=</span><span class="number">3</span>);
|
||
|
||
<span class="kw">let</span> (<span class="ident">item</span>, <span class="ident">stream</span>) <span class="op">=</span> <span class="ident">stream</span>.<span class="ident">into_future</span>().<span class="kw">await</span>;
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="prelude-val">Some</span>(<span class="number">1</span>), <span class="ident">item</span>);
|
||
|
||
<span class="kw">let</span> (<span class="ident">item</span>, <span class="ident">stream</span>) <span class="op">=</span> <span class="ident">stream</span>.<span class="ident">into_future</span>().<span class="kw">await</span>;
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="prelude-val">Some</span>(<span class="number">2</span>), <span class="ident">item</span>);</pre></div>
|
||
</div><h3 id="method.map" class="method"><code>pub fn <a href="#method.map" class="fnname">map</a><T, F>(self, f: F) -> <a class="struct" href="../../futures/stream/struct.Map.html" title="struct futures::stream::Map">Map</a><Self, F> <span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>) -> T, </span></code><a class="srclink" href="../../src/futures_util/stream/stream/mod.rs.html#301-304" title="goto source code">[src]</a></h3><div class="docblock"><p>Maps this stream's items to a different type, returning a new stream of
|
||
the resulting type.</p>
|
||
<p>The provided closure is executed over all elements of this stream as
|
||
they are made available. It is executed inline with calls to
|
||
<a href="../../futures/stream/trait.Stream.html#tymethod.poll_next"><code>poll_next</code></a>.</p>
|
||
<p>Note that this function consumes the stream passed into it and returns a
|
||
wrapped version of it, similar to the existing <code>map</code> methods in the
|
||
standard library.</p>
|
||
<h1 id="examples-2" class="section-header"><a href="#examples-2">Examples</a></h1>
|
||
<div class="example-wrap"><pre class="rust rust-example-rendered">
|
||
<span class="kw">use</span> <span class="ident">futures</span>::<span class="ident">stream</span>::{<span class="self">self</span>, <span class="ident">StreamExt</span>};
|
||
|
||
<span class="kw">let</span> <span class="ident">stream</span> <span class="op">=</span> <span class="ident">stream</span>::<span class="ident">iter</span>(<span class="number">1</span>..<span class="op">=</span><span class="number">3</span>);
|
||
<span class="kw">let</span> <span class="ident">stream</span> <span class="op">=</span> <span class="ident">stream</span>.<span class="ident">map</span>(<span class="op">|</span><span class="ident">x</span><span class="op">|</span> <span class="ident">x</span> <span class="op">+</span> <span class="number">3</span>);
|
||
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="macro">vec</span><span class="macro">!</span>[<span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>], <span class="ident">stream</span>.<span class="ident">collect</span>::<span class="op"><</span><span class="ident">Vec</span><span class="op"><</span><span class="kw">_</span><span class="op">></span><span class="op">></span>().<span class="kw">await</span>);</pre></div>
|
||
</div><h3 id="method.enumerate" class="method"><code>pub fn <a href="#method.enumerate" class="fnname">enumerate</a>(self) -> <a class="struct" href="../../futures/stream/struct.Enumerate.html" title="struct futures::stream::Enumerate">Enumerate</a><Self></code><a class="srclink" href="../../src/futures_util/stream/stream/mod.rs.html#347-349" title="goto source code">[src]</a></h3><div class="docblock"><p>Creates a stream which gives the current iteration count as well as
|
||
the next value.</p>
|
||
<p>The stream returned yields pairs <code>(i, val)</code>, where <code>i</code> is the
|
||
current index of iteration and <code>val</code> is the value returned by the
|
||
stream.</p>
|
||
<p><code>enumerate()</code> keeps its count as a <a href="../../std/primitive.usize.html" title="usize"><code>usize</code></a>. If you want to count by a
|
||
different sized integer, the <a href="../../futures/stream/trait.StreamExt.html#method.zip"><code>zip</code></a> function provides similar
|
||
functionality.</p>
|
||
<h1 id="overflow-behavior" class="section-header"><a href="#overflow-behavior">Overflow Behavior</a></h1>
|
||
<p>The method does no guarding against overflows, so enumerating more than
|
||
[<code>prim@usize::max_value()</code>] elements either produces the wrong result or panics. If
|
||
debug assertions are enabled, a panic is guaranteed.</p>
|
||
<h1 id="panics" class="section-header"><a href="#panics">Panics</a></h1>
|
||
<p>The returned stream might panic if the to-be-returned index would
|
||
overflow a <a href="../../std/primitive.usize.html" title="usize"><code>usize</code></a>.</p>
|
||
<h1 id="examples-3" class="section-header"><a href="#examples-3">Examples</a></h1>
|
||
<div class="example-wrap"><pre class="rust rust-example-rendered">
|
||
<span class="kw">use</span> <span class="ident">futures</span>::<span class="ident">stream</span>::{<span class="self">self</span>, <span class="ident">StreamExt</span>};
|
||
|
||
<span class="kw">let</span> <span class="ident">stream</span> <span class="op">=</span> <span class="ident">stream</span>::<span class="ident">iter</span>(<span class="macro">vec</span><span class="macro">!</span>[<span class="string">'a'</span>, <span class="string">'b'</span>, <span class="string">'c'</span>]);
|
||
|
||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">stream</span> <span class="op">=</span> <span class="ident">stream</span>.<span class="ident">enumerate</span>();
|
||
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">stream</span>.<span class="ident">next</span>().<span class="kw">await</span>, <span class="prelude-val">Some</span>((<span class="number">0</span>, <span class="string">'a'</span>)));
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">stream</span>.<span class="ident">next</span>().<span class="kw">await</span>, <span class="prelude-val">Some</span>((<span class="number">1</span>, <span class="string">'b'</span>)));
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">stream</span>.<span class="ident">next</span>().<span class="kw">await</span>, <span class="prelude-val">Some</span>((<span class="number">2</span>, <span class="string">'c'</span>)));
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">stream</span>.<span class="ident">next</span>().<span class="kw">await</span>, <span class="prelude-val">None</span>);</pre></div>
|
||
</div><h3 id="method.filter" class="method"><code>pub fn <a href="#method.filter" class="fnname">filter</a><Fut, F>(self, f: F) -> <a class="struct" href="../../futures/stream/struct.Filter.html" title="struct futures::stream::Filter">Filter</a><Self, Fut, F> <span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(&Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>) -> Fut,<br> Fut: <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a><Output = <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>>, </span></code><a class="srclink" href="../../src/futures_util/stream/stream/mod.rs.html#380-384" title="goto source code">[src]</a></h3><div class="docblock"><p>Filters the values produced by this stream according to the provided
|
||
asynchronous predicate.</p>
|
||
<p>As values of this stream are made available, the provided predicate <code>f</code>
|
||
will be run against them. If the predicate returns a <code>Future</code> which
|
||
resolves to <code>true</code>, then the stream will yield the value, but if the
|
||
predicate returns a <code>Future</code> which resolves to <code>false</code>, then the value
|
||
will be discarded and the next value will be produced.</p>
|
||
<p>Note that this function consumes the stream passed into it and returns a
|
||
wrapped version of it, similar to the existing <code>filter</code> methods in the
|
||
standard library.</p>
|
||
<h1 id="examples-4" class="section-header"><a href="#examples-4">Examples</a></h1>
|
||
<div class="example-wrap"><pre class="rust rust-example-rendered">
|
||
<span class="kw">use</span> <span class="ident">futures</span>::<span class="ident">future</span>;
|
||
<span class="kw">use</span> <span class="ident">futures</span>::<span class="ident">stream</span>::{<span class="self">self</span>, <span class="ident">StreamExt</span>};
|
||
|
||
<span class="kw">let</span> <span class="ident">stream</span> <span class="op">=</span> <span class="ident">stream</span>::<span class="ident">iter</span>(<span class="number">1</span>..<span class="op">=</span><span class="number">10</span>);
|
||
<span class="kw">let</span> <span class="ident">evens</span> <span class="op">=</span> <span class="ident">stream</span>.<span class="ident">filter</span>(<span class="op">|</span><span class="ident">x</span><span class="op">|</span> <span class="ident">future</span>::<span class="ident">ready</span>(<span class="ident">x</span> <span class="op">%</span> <span class="number">2</span> <span class="op">=</span><span class="op">=</span> <span class="number">0</span>));
|
||
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="macro">vec</span><span class="macro">!</span>[<span class="number">2</span>, <span class="number">4</span>, <span class="number">6</span>, <span class="number">8</span>, <span class="number">10</span>], <span class="ident">evens</span>.<span class="ident">collect</span>::<span class="op"><</span><span class="ident">Vec</span><span class="op"><</span><span class="kw">_</span><span class="op">></span><span class="op">></span>().<span class="kw">await</span>);</pre></div>
|
||
</div><h3 id="method.filter_map" class="method"><code>pub fn <a href="#method.filter_map" class="fnname">filter_map</a><Fut, T, F>(self, f: F) -> <a class="struct" href="../../futures/stream/struct.FilterMap.html" title="struct futures::stream::FilterMap">FilterMap</a><Self, Fut, F> <span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>) -> Fut,<br> Fut: <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a><Output = <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><T>>, </span></code><a class="srclink" href="../../src/futures_util/stream/stream/mod.rs.html#414-418" title="goto source code">[src]</a></h3><div class="docblock"><p>Filters the values produced by this stream while simultaneously mapping
|
||
them to a different type according to the provided asynchronous closure.</p>
|
||
<p>As values of this stream are made available, the provided function will
|
||
be run on them. If the future returned by the predicate <code>f</code> resolves to
|
||
<a href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html#variant.Some"><code>Some(item)</code></a> then the stream will yield the value <code>item</code>, but if
|
||
it resolves to <a href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html#variant.None" title="None"><code>None</code></a> then the next value will be produced.</p>
|
||
<p>Note that this function consumes the stream passed into it and returns a
|
||
wrapped version of it, similar to the existing <code>filter_map</code> methods in
|
||
the standard library.</p>
|
||
<h1 id="examples-5" class="section-header"><a href="#examples-5">Examples</a></h1>
|
||
<div class="example-wrap"><pre class="rust rust-example-rendered">
|
||
<span class="kw">use</span> <span class="ident">futures</span>::<span class="ident">stream</span>::{<span class="self">self</span>, <span class="ident">StreamExt</span>};
|
||
|
||
<span class="kw">let</span> <span class="ident">stream</span> <span class="op">=</span> <span class="ident">stream</span>::<span class="ident">iter</span>(<span class="number">1</span>..<span class="op">=</span><span class="number">10</span>);
|
||
<span class="kw">let</span> <span class="ident">evens</span> <span class="op">=</span> <span class="ident">stream</span>.<span class="ident">filter_map</span>(<span class="op">|</span><span class="ident">x</span><span class="op">|</span> <span class="kw">async</span> <span class="kw">move</span> {
|
||
<span class="kw">if</span> <span class="ident">x</span> <span class="op">%</span> <span class="number">2</span> <span class="op">=</span><span class="op">=</span> <span class="number">0</span> { <span class="prelude-val">Some</span>(<span class="ident">x</span> <span class="op">+</span> <span class="number">1</span>) } <span class="kw">else</span> { <span class="prelude-val">None</span> }
|
||
});
|
||
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="macro">vec</span><span class="macro">!</span>[<span class="number">3</span>, <span class="number">5</span>, <span class="number">7</span>, <span class="number">9</span>, <span class="number">11</span>], <span class="ident">evens</span>.<span class="ident">collect</span>::<span class="op"><</span><span class="ident">Vec</span><span class="op"><</span><span class="kw">_</span><span class="op">></span><span class="op">></span>().<span class="kw">await</span>);</pre></div>
|
||
</div><h3 id="method.then" class="method"><code>pub fn <a href="#method.then" class="fnname">then</a><Fut, F>(self, f: F) -> <a class="struct" href="../../futures/stream/struct.Then.html" title="struct futures::stream::Then">Then</a><Self, Fut, F> <span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>) -> Fut,<br> Fut: <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a>, </span></code><a class="srclink" href="../../src/futures_util/stream/stream/mod.rs.html#445-449" title="goto source code">[src]</a></h3><div class="docblock"><p>Computes from this stream's items new items of a different type using
|
||
an asynchronous closure.</p>
|
||
<p>The provided closure <code>f</code> will be called with an <code>Item</code> once a value is
|
||
ready, it returns a future which will then be run to completion
|
||
to produce the next value on this stream.</p>
|
||
<p>Note that this function consumes the stream passed into it and returns a
|
||
wrapped version of it.</p>
|
||
<h1 id="examples-6" class="section-header"><a href="#examples-6">Examples</a></h1>
|
||
<div class="example-wrap"><pre class="rust rust-example-rendered">
|
||
<span class="kw">use</span> <span class="ident">futures</span>::<span class="ident">stream</span>::{<span class="self">self</span>, <span class="ident">StreamExt</span>};
|
||
|
||
<span class="kw">let</span> <span class="ident">stream</span> <span class="op">=</span> <span class="ident">stream</span>::<span class="ident">iter</span>(<span class="number">1</span>..<span class="op">=</span><span class="number">3</span>);
|
||
<span class="kw">let</span> <span class="ident">stream</span> <span class="op">=</span> <span class="ident">stream</span>.<span class="ident">then</span>(<span class="op">|</span><span class="ident">x</span><span class="op">|</span> <span class="kw">async</span> <span class="kw">move</span> { <span class="ident">x</span> <span class="op">+</span> <span class="number">3</span> });
|
||
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="macro">vec</span><span class="macro">!</span>[<span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>], <span class="ident">stream</span>.<span class="ident">collect</span>::<span class="op"><</span><span class="ident">Vec</span><span class="op"><</span><span class="kw">_</span><span class="op">></span><span class="op">></span>().<span class="kw">await</span>);</pre></div>
|
||
</div><h3 id="method.collect" class="method"><code>pub fn <a href="#method.collect" class="fnname">collect</a><C>(self) -> <a class="struct" href="../../futures/stream/struct.Collect.html" title="struct futures::stream::Collect">Collect</a><Self, C><span class="notable-traits"><span class="notable-traits-tooltip">ⓘ<div class="notable-traits-tooltiptext"><span class="docblock"><h3 class="notable">Notable traits for <a class="struct" href="../../futures/stream/struct.Collect.html" title="struct futures::stream::Collect">Collect</a><St, C></h3><code class="content"><span class="where fmt-newline">impl<St, C> <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a> for <a class="struct" href="../../futures/stream/struct.Collect.html" title="struct futures::stream::Collect">Collect</a><St, C> <span class="where fmt-newline">where<br> C: <a class="trait" href="https://doc.rust-lang.org/nightly/core/default/trait.Default.html" title="trait core::default::Default">Default</a> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.Extend.html" title="trait core::iter::traits::collect::Extend">Extend</a><<St as <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a>>::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>>,<br> St: <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a>, </span></span><span class="where fmt-newline"> type <a href="../../futures/future/trait.Future.html#associatedtype.Output" class="type">Output</a> = C;</span></code></span></div></span></span> <span class="where fmt-newline">where<br> C: <a class="trait" href="https://doc.rust-lang.org/nightly/core/default/trait.Default.html" title="trait core::default::Default">Default</a> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.Extend.html" title="trait core::iter::traits::collect::Extend">Extend</a><Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>>, </span></code><a class="srclink" href="../../src/futures_util/stream/stream/mod.rs.html#479-481" title="goto source code">[src]</a></h3><div class="docblock"><p>Transforms a stream into a collection, returning a
|
||
future representing the result of that computation.</p>
|
||
<p>The returned future will be resolved when the stream terminates.</p>
|
||
<h1 id="examples-7" class="section-header"><a href="#examples-7">Examples</a></h1>
|
||
<div class="example-wrap"><pre class="rust rust-example-rendered">
|
||
<span class="kw">use</span> <span class="ident">futures</span>::<span class="ident">channel</span>::<span class="ident">mpsc</span>;
|
||
<span class="kw">use</span> <span class="ident">futures</span>::<span class="ident">stream</span>::<span class="ident">StreamExt</span>;
|
||
<span class="kw">use</span> <span class="ident">std</span>::<span class="ident">thread</span>;
|
||
|
||
<span class="kw">let</span> (<span class="ident">tx</span>, <span class="ident">rx</span>) <span class="op">=</span> <span class="ident">mpsc</span>::<span class="ident">unbounded</span>();
|
||
|
||
<span class="ident">thread</span>::<span class="ident">spawn</span>(<span class="kw">move</span> <span class="op">|</span><span class="op">|</span> {
|
||
<span class="kw">for</span> <span class="ident">i</span> <span class="kw">in</span> <span class="number">1</span>..<span class="op">=</span><span class="number">5</span> {
|
||
<span class="ident">tx</span>.<span class="ident">unbounded_send</span>(<span class="ident">i</span>).<span class="ident">unwrap</span>();
|
||
}
|
||
});
|
||
|
||
<span class="kw">let</span> <span class="ident">output</span> <span class="op">=</span> <span class="ident">rx</span>.<span class="ident">collect</span>::<span class="op"><</span><span class="ident">Vec</span><span class="op"><</span><span class="ident">i32</span><span class="op">></span><span class="op">></span>().<span class="kw">await</span>;
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">output</span>, <span class="macro">vec</span><span class="macro">!</span>[<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>]);</pre></div>
|
||
</div><h3 id="method.unzip" class="method"><code>pub fn <a href="#method.unzip" class="fnname">unzip</a><A, B, FromA, FromB>(self) -> <a class="struct" href="../../futures/stream/struct.Unzip.html" title="struct futures::stream::Unzip">Unzip</a><Self, FromA, FromB><span class="notable-traits"><span class="notable-traits-tooltip">ⓘ<div class="notable-traits-tooltiptext"><span class="docblock"><h3 class="notable">Notable traits for <a class="struct" href="../../futures/stream/struct.Unzip.html" title="struct futures::stream::Unzip">Unzip</a><St, FromA, FromB></h3><code class="content"><span class="where fmt-newline">impl<St, A, B, FromA, FromB> <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a> for <a class="struct" href="../../futures/stream/struct.Unzip.html" title="struct futures::stream::Unzip">Unzip</a><St, FromA, FromB> <span class="where fmt-newline">where<br> St: <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a><Item = <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">(</a>A, B<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">)</a>>,<br> FromA: <a class="trait" href="https://doc.rust-lang.org/nightly/core/default/trait.Default.html" title="trait core::default::Default">Default</a> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.Extend.html" title="trait core::iter::traits::collect::Extend">Extend</a><A>,<br> FromB: <a class="trait" href="https://doc.rust-lang.org/nightly/core/default/trait.Default.html" title="trait core::default::Default">Default</a> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.Extend.html" title="trait core::iter::traits::collect::Extend">Extend</a><B>, </span></span><span class="where fmt-newline"> type <a href="../../futures/future/trait.Future.html#associatedtype.Output" class="type">Output</a> = <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">(</a>FromA, FromB<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">)</a>;</span></code></span></div></span></span> <span class="where fmt-newline">where<br> Self: <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a><Item = <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">(</a>A, B<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">)</a>>,<br> FromA: <a class="trait" href="https://doc.rust-lang.org/nightly/core/default/trait.Default.html" title="trait core::default::Default">Default</a> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.Extend.html" title="trait core::iter::traits::collect::Extend">Extend</a><A>,<br> FromB: <a class="trait" href="https://doc.rust-lang.org/nightly/core/default/trait.Default.html" title="trait core::default::Default">Default</a> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.Extend.html" title="trait core::iter::traits::collect::Extend">Extend</a><B>, </span></code><a class="srclink" href="../../src/futures_util/stream/stream/mod.rs.html#516-520" title="goto source code">[src]</a></h3><div class="docblock"><p>Converts a stream of pairs into a future, which
|
||
resolves to pair of containers.</p>
|
||
<p><code>unzip()</code> produces a future, which resolves to two
|
||
collections: one from the left elements of the pairs,
|
||
and one from the right elements.</p>
|
||
<p>The returned future will be resolved when the stream terminates.</p>
|
||
<h1 id="examples-8" class="section-header"><a href="#examples-8">Examples</a></h1>
|
||
<div class="example-wrap"><pre class="rust rust-example-rendered">
|
||
<span class="kw">use</span> <span class="ident">futures</span>::<span class="ident">channel</span>::<span class="ident">mpsc</span>;
|
||
<span class="kw">use</span> <span class="ident">futures</span>::<span class="ident">stream</span>::<span class="ident">StreamExt</span>;
|
||
<span class="kw">use</span> <span class="ident">std</span>::<span class="ident">thread</span>;
|
||
|
||
<span class="kw">let</span> (<span class="ident">tx</span>, <span class="ident">rx</span>) <span class="op">=</span> <span class="ident">mpsc</span>::<span class="ident">unbounded</span>();
|
||
|
||
<span class="ident">thread</span>::<span class="ident">spawn</span>(<span class="kw">move</span> <span class="op">|</span><span class="op">|</span> {
|
||
<span class="ident">tx</span>.<span class="ident">unbounded_send</span>((<span class="number">1</span>, <span class="number">2</span>)).<span class="ident">unwrap</span>();
|
||
<span class="ident">tx</span>.<span class="ident">unbounded_send</span>((<span class="number">3</span>, <span class="number">4</span>)).<span class="ident">unwrap</span>();
|
||
<span class="ident">tx</span>.<span class="ident">unbounded_send</span>((<span class="number">5</span>, <span class="number">6</span>)).<span class="ident">unwrap</span>();
|
||
});
|
||
|
||
<span class="kw">let</span> (<span class="ident">o1</span>, <span class="ident">o2</span>): (<span class="ident">Vec</span><span class="op"><</span><span class="kw">_</span><span class="op">></span>, <span class="ident">Vec</span><span class="op"><</span><span class="kw">_</span><span class="op">></span>) <span class="op">=</span> <span class="ident">rx</span>.<span class="ident">unzip</span>().<span class="kw">await</span>;
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">o1</span>, <span class="macro">vec</span><span class="macro">!</span>[<span class="number">1</span>, <span class="number">3</span>, <span class="number">5</span>]);
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">o2</span>, <span class="macro">vec</span><span class="macro">!</span>[<span class="number">2</span>, <span class="number">4</span>, <span class="number">6</span>]);</pre></div>
|
||
</div><h3 id="method.concat" class="method"><code>pub fn <a href="#method.concat" class="fnname">concat</a>(self) -> <a class="struct" href="../../futures/stream/struct.Concat.html" title="struct futures::stream::Concat">Concat</a><Self><span class="notable-traits"><span class="notable-traits-tooltip">ⓘ<div class="notable-traits-tooltiptext"><span class="docblock"><h3 class="notable">Notable traits for <a class="struct" href="../../futures/stream/struct.Concat.html" title="struct futures::stream::Concat">Concat</a><St></h3><code class="content"><span class="where fmt-newline">impl<St> <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a> for <a class="struct" href="../../futures/stream/struct.Concat.html" title="struct futures::stream::Concat">Concat</a><St> <span class="where fmt-newline">where<br> St: <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a>,<br> <St as <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a>>::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>: <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.Extend.html" title="trait core::iter::traits::collect::Extend">Extend</a><<<St as <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a>>::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a> as <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html" title="trait core::iter::traits::collect::IntoIterator">IntoIterator</a>>::<a class="type" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html#associatedtype.Item" title="type core::iter::traits::collect::IntoIterator::Item">Item</a>>,<br> <St as <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a>>::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>: <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html" title="trait core::iter::traits::collect::IntoIterator">IntoIterator</a>,<br> <St as <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a>>::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>: <a class="trait" href="https://doc.rust-lang.org/nightly/core/default/trait.Default.html" title="trait core::default::Default">Default</a>, </span></span><span class="where fmt-newline"> type <a href="../../futures/future/trait.Future.html#associatedtype.Output" class="type">Output</a> = <St as <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a>>::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>;</span></code></span></div></span></span> <span class="where fmt-newline">where<br> Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>: <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.Extend.html" title="trait core::iter::traits::collect::Extend">Extend</a><<Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a> as <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html" title="trait core::iter::traits::collect::IntoIterator">IntoIterator</a>>::<a class="type" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html#associatedtype.Item" title="type core::iter::traits::collect::IntoIterator::Item">Item</a>>,<br> Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>: <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html" title="trait core::iter::traits::collect::IntoIterator">IntoIterator</a>,<br> Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>: <a class="trait" href="https://doc.rust-lang.org/nightly/core/default/trait.Default.html" title="trait core::default::Default">Default</a>, </span></code><a class="srclink" href="../../src/futures_util/stream/stream/mod.rs.html#557-560" title="goto source code">[src]</a></h3><div class="docblock"><p>Concatenate all items of a stream into a single extendable
|
||
destination, returning a future representing the end result.</p>
|
||
<p>This combinator will extend the first item with the contents
|
||
of all the subsequent results of the stream. If the stream is
|
||
empty, the default value will be returned.</p>
|
||
<p>Works with all collections that implement the
|
||
<a href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.Extend.html"><code>Extend</code></a> trait.</p>
|
||
<h1 id="examples-9" class="section-header"><a href="#examples-9">Examples</a></h1>
|
||
<div class="example-wrap"><pre class="rust rust-example-rendered">
|
||
<span class="kw">use</span> <span class="ident">futures</span>::<span class="ident">channel</span>::<span class="ident">mpsc</span>;
|
||
<span class="kw">use</span> <span class="ident">futures</span>::<span class="ident">stream</span>::<span class="ident">StreamExt</span>;
|
||
<span class="kw">use</span> <span class="ident">std</span>::<span class="ident">thread</span>;
|
||
|
||
<span class="kw">let</span> (<span class="ident">tx</span>, <span class="ident">rx</span>) <span class="op">=</span> <span class="ident">mpsc</span>::<span class="ident">unbounded</span>();
|
||
|
||
<span class="ident">thread</span>::<span class="ident">spawn</span>(<span class="kw">move</span> <span class="op">|</span><span class="op">|</span> {
|
||
<span class="kw">for</span> <span class="ident">i</span> <span class="kw">in</span> (<span class="number">0</span>..<span class="number">3</span>).<span class="ident">rev</span>() {
|
||
<span class="kw">let</span> <span class="ident">n</span> <span class="op">=</span> <span class="ident">i</span> <span class="op">*</span> <span class="number">3</span>;
|
||
<span class="ident">tx</span>.<span class="ident">unbounded_send</span>(<span class="macro">vec</span><span class="macro">!</span>[<span class="ident">n</span> <span class="op">+</span> <span class="number">1</span>, <span class="ident">n</span> <span class="op">+</span> <span class="number">2</span>, <span class="ident">n</span> <span class="op">+</span> <span class="number">3</span>]).<span class="ident">unwrap</span>();
|
||
}
|
||
});
|
||
|
||
<span class="kw">let</span> <span class="ident">result</span> <span class="op">=</span> <span class="ident">rx</span>.<span class="ident">concat</span>().<span class="kw">await</span>;
|
||
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">result</span>, <span class="macro">vec</span><span class="macro">!</span>[<span class="number">7</span>, <span class="number">8</span>, <span class="number">9</span>, <span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>]);</pre></div>
|
||
</div><h3 id="method.cycle" class="method"><code>pub fn <a href="#method.cycle" class="fnname">cycle</a>(self) -> <a class="struct" href="../../futures/stream/struct.Cycle.html" title="struct futures::stream::Cycle">Cycle</a><Self> <span class="where fmt-newline">where<br> Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a>, </span></code><a class="srclink" href="../../src/futures_util/stream/stream/mod.rs.html#588-590" title="goto source code">[src]</a></h3><div class="docblock"><p>Repeats a stream endlessly.</p>
|
||
<p>The stream never terminates. Note that you likely want to avoid
|
||
usage of <code>collect</code> or such on the returned stream as it will exhaust
|
||
available memory as it tries to just fill up all RAM.</p>
|
||
<h1 id="examples-10" class="section-header"><a href="#examples-10">Examples</a></h1>
|
||
<div class="example-wrap"><pre class="rust rust-example-rendered">
|
||
<span class="kw">use</span> <span class="ident">futures</span>::<span class="ident">stream</span>::{<span class="self">self</span>, <span class="ident">StreamExt</span>};
|
||
<span class="kw">let</span> <span class="ident">a</span> <span class="op">=</span> [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>];
|
||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">s</span> <span class="op">=</span> <span class="ident">stream</span>::<span class="ident">iter</span>(<span class="ident">a</span>.<span class="ident">iter</span>()).<span class="ident">cycle</span>();
|
||
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">s</span>.<span class="ident">next</span>().<span class="kw">await</span>, <span class="prelude-val">Some</span>(<span class="kw-2">&</span><span class="number">1</span>));
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">s</span>.<span class="ident">next</span>().<span class="kw">await</span>, <span class="prelude-val">Some</span>(<span class="kw-2">&</span><span class="number">2</span>));
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">s</span>.<span class="ident">next</span>().<span class="kw">await</span>, <span class="prelude-val">Some</span>(<span class="kw-2">&</span><span class="number">3</span>));
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">s</span>.<span class="ident">next</span>().<span class="kw">await</span>, <span class="prelude-val">Some</span>(<span class="kw-2">&</span><span class="number">1</span>));
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">s</span>.<span class="ident">next</span>().<span class="kw">await</span>, <span class="prelude-val">Some</span>(<span class="kw-2">&</span><span class="number">2</span>));
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">s</span>.<span class="ident">next</span>().<span class="kw">await</span>, <span class="prelude-val">Some</span>(<span class="kw-2">&</span><span class="number">3</span>));
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">s</span>.<span class="ident">next</span>().<span class="kw">await</span>, <span class="prelude-val">Some</span>(<span class="kw-2">&</span><span class="number">1</span>));</pre></div>
|
||
</div><h3 id="method.fold" class="method"><code>pub fn <a href="#method.fold" class="fnname">fold</a><T, Fut, F>(self, init: T, f: F) -> <a class="struct" href="../../futures/stream/struct.Fold.html" title="struct futures::stream::Fold">Fold</a><Self, Fut, T, F><span class="notable-traits"><span class="notable-traits-tooltip">ⓘ<div class="notable-traits-tooltiptext"><span class="docblock"><h3 class="notable">Notable traits for <a class="struct" href="../../futures/stream/struct.Fold.html" title="struct futures::stream::Fold">Fold</a><St, Fut, T, F></h3><code class="content"><span class="where fmt-newline">impl<St, Fut, T, F> <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a> for <a class="struct" href="../../futures/stream/struct.Fold.html" title="struct futures::stream::Fold">Fold</a><St, Fut, T, F> <span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(T, <St as <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a>>::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>) -> Fut,<br> Fut: <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a><Output = T>,<br> St: <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a>, </span></span><span class="where fmt-newline"> type <a href="../../futures/future/trait.Future.html#associatedtype.Output" class="type">Output</a> = T;</span></code></span></div></span></span> <span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(T, Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>) -> Fut,<br> Fut: <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a><Output = T>, </span></code><a class="srclink" href="../../src/futures_util/stream/stream/mod.rs.html#615-619" title="goto source code">[src]</a></h3><div class="docblock"><p>Execute an accumulating asynchronous computation over a stream,
|
||
collecting all the values into one final result.</p>
|
||
<p>This combinator will accumulate all values returned by this stream
|
||
according to the closure provided. The initial state is also provided to
|
||
this method and then is returned again by each execution of the closure.
|
||
Once the entire stream has been exhausted the returned future will
|
||
resolve to this value.</p>
|
||
<h1 id="examples-11" class="section-header"><a href="#examples-11">Examples</a></h1>
|
||
<div class="example-wrap"><pre class="rust rust-example-rendered">
|
||
<span class="kw">use</span> <span class="ident">futures</span>::<span class="ident">stream</span>::{<span class="self">self</span>, <span class="ident">StreamExt</span>};
|
||
|
||
<span class="kw">let</span> <span class="ident">number_stream</span> <span class="op">=</span> <span class="ident">stream</span>::<span class="ident">iter</span>(<span class="number">0</span>..<span class="number">6</span>);
|
||
<span class="kw">let</span> <span class="ident">sum</span> <span class="op">=</span> <span class="ident">number_stream</span>.<span class="ident">fold</span>(<span class="number">0</span>, <span class="op">|</span><span class="ident">acc</span>, <span class="ident">x</span><span class="op">|</span> <span class="kw">async</span> <span class="kw">move</span> { <span class="ident">acc</span> <span class="op">+</span> <span class="ident">x</span> });
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">sum</span>.<span class="kw">await</span>, <span class="number">15</span>);</pre></div>
|
||
</div><h3 id="method.flatten" class="method"><code>pub fn <a href="#method.flatten" class="fnname">flatten</a>(self) -> <a class="struct" href="../../futures/stream/struct.Flatten.html" title="struct futures::stream::Flatten">Flatten</a><Self> <span class="where fmt-newline">where<br> Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>: <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a>, </span></code><a class="srclink" href="../../src/futures_util/stream/stream/mod.rs.html#655-658" title="goto source code">[src]</a></h3><div class="docblock"><p>Flattens a stream of streams into just one continuous stream.</p>
|
||
<h1 id="examples-12" class="section-header"><a href="#examples-12">Examples</a></h1>
|
||
<div class="example-wrap"><pre class="rust rust-example-rendered">
|
||
<span class="kw">use</span> <span class="ident">futures</span>::<span class="ident">channel</span>::<span class="ident">mpsc</span>;
|
||
<span class="kw">use</span> <span class="ident">futures</span>::<span class="ident">stream</span>::<span class="ident">StreamExt</span>;
|
||
<span class="kw">use</span> <span class="ident">std</span>::<span class="ident">thread</span>;
|
||
|
||
<span class="kw">let</span> (<span class="ident">tx1</span>, <span class="ident">rx1</span>) <span class="op">=</span> <span class="ident">mpsc</span>::<span class="ident">unbounded</span>();
|
||
<span class="kw">let</span> (<span class="ident">tx2</span>, <span class="ident">rx2</span>) <span class="op">=</span> <span class="ident">mpsc</span>::<span class="ident">unbounded</span>();
|
||
<span class="kw">let</span> (<span class="ident">tx3</span>, <span class="ident">rx3</span>) <span class="op">=</span> <span class="ident">mpsc</span>::<span class="ident">unbounded</span>();
|
||
|
||
<span class="ident">thread</span>::<span class="ident">spawn</span>(<span class="kw">move</span> <span class="op">|</span><span class="op">|</span> {
|
||
<span class="ident">tx1</span>.<span class="ident">unbounded_send</span>(<span class="number">1</span>).<span class="ident">unwrap</span>();
|
||
<span class="ident">tx1</span>.<span class="ident">unbounded_send</span>(<span class="number">2</span>).<span class="ident">unwrap</span>();
|
||
});
|
||
<span class="ident">thread</span>::<span class="ident">spawn</span>(<span class="kw">move</span> <span class="op">|</span><span class="op">|</span> {
|
||
<span class="ident">tx2</span>.<span class="ident">unbounded_send</span>(<span class="number">3</span>).<span class="ident">unwrap</span>();
|
||
<span class="ident">tx2</span>.<span class="ident">unbounded_send</span>(<span class="number">4</span>).<span class="ident">unwrap</span>();
|
||
});
|
||
<span class="ident">thread</span>::<span class="ident">spawn</span>(<span class="kw">move</span> <span class="op">|</span><span class="op">|</span> {
|
||
<span class="ident">tx3</span>.<span class="ident">unbounded_send</span>(<span class="ident">rx1</span>).<span class="ident">unwrap</span>();
|
||
<span class="ident">tx3</span>.<span class="ident">unbounded_send</span>(<span class="ident">rx2</span>).<span class="ident">unwrap</span>();
|
||
});
|
||
|
||
<span class="kw">let</span> <span class="ident">output</span> <span class="op">=</span> <span class="ident">rx3</span>.<span class="ident">flatten</span>().<span class="ident">collect</span>::<span class="op"><</span><span class="ident">Vec</span><span class="op"><</span><span class="ident">i32</span><span class="op">></span><span class="op">></span>().<span class="kw">await</span>;
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">output</span>, <span class="macro">vec</span><span class="macro">!</span>[<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>]);</pre></div>
|
||
</div><h3 id="method.flat_map" class="method"><code>pub fn <a href="#method.flat_map" class="fnname">flat_map</a><U, F>(self, f: F) -> <a class="struct" href="../../futures/stream/struct.FlatMap.html" title="struct futures::stream::FlatMap">FlatMap</a><Self, U, F> <span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>) -> U,<br> U: <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a>, </span></code><a class="srclink" href="../../src/futures_util/stream/stream/mod.rs.html#688-692" title="goto source code">[src]</a></h3><div class="docblock"><p>Maps a stream like <a href="../../futures/stream/trait.StreamExt.html#method.map" title="StreamExt::map"><code>StreamExt::map</code></a> but flattens nested <code>Stream</code>s.</p>
|
||
<p><a href="../../futures/stream/trait.StreamExt.html#method.map" title="StreamExt::map"><code>StreamExt::map</code></a> is very useful, but if it produces a <code>Stream</code> instead,
|
||
you would have to chain combinators like <code>.map(f).flatten()</code> while this
|
||
combinator provides ability to write <code>.flat_map(f)</code> instead of chaining.</p>
|
||
<p>The provided closure which produce inner streams is executed over all elements
|
||
of stream as last inner stream is terminated and next stream item is available.</p>
|
||
<p>Note that this function consumes the stream passed into it and returns a
|
||
wrapped version of it, similar to the existing <code>flat_map</code> methods in the
|
||
standard library.</p>
|
||
<h1 id="examples-13" class="section-header"><a href="#examples-13">Examples</a></h1>
|
||
<div class="example-wrap"><pre class="rust rust-example-rendered">
|
||
<span class="kw">use</span> <span class="ident">futures</span>::<span class="ident">stream</span>::{<span class="self">self</span>, <span class="ident">StreamExt</span>};
|
||
|
||
<span class="kw">let</span> <span class="ident">stream</span> <span class="op">=</span> <span class="ident">stream</span>::<span class="ident">iter</span>(<span class="number">1</span>..<span class="op">=</span><span class="number">3</span>);
|
||
<span class="kw">let</span> <span class="ident">stream</span> <span class="op">=</span> <span class="ident">stream</span>.<span class="ident">flat_map</span>(<span class="op">|</span><span class="ident">x</span><span class="op">|</span> <span class="ident">stream</span>::<span class="ident">iter</span>(<span class="macro">vec</span><span class="macro">!</span>[<span class="ident">x</span> <span class="op">+</span> <span class="number">3</span>; <span class="ident">x</span>]));
|
||
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="macro">vec</span><span class="macro">!</span>[<span class="number">4</span>, <span class="number">5</span>, <span class="number">5</span>, <span class="number">6</span>, <span class="number">6</span>, <span class="number">6</span>], <span class="ident">stream</span>.<span class="ident">collect</span>::<span class="op"><</span><span class="ident">Vec</span><span class="op"><</span><span class="kw">_</span><span class="op">></span><span class="op">></span>().<span class="kw">await</span>);</pre></div>
|
||
</div><h3 id="method.scan" class="method"><code>pub fn <a href="#method.scan" class="fnname">scan</a><S, B, Fut, F>(self, initial_state: S, f: F) -> <a class="struct" href="../../futures/stream/struct.Scan.html" title="struct futures::stream::Scan">Scan</a><Self, S, Fut, F> <span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&mut </a>S, Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>) -> Fut,<br> Fut: <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a><Output = <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><B>>, </span></code><a class="srclink" href="../../src/futures_util/stream/stream/mod.rs.html#721-725" title="goto source code">[src]</a></h3><div class="docblock"><p>Combinator similar to <a href="../../futures/stream/trait.StreamExt.html#method.fold" title="StreamExt::fold"><code>StreamExt::fold</code></a> that holds internal state
|
||
and produces a new stream.</p>
|
||
<p>Accepts initial state and closure which will be applied to each element
|
||
of the stream until provided closure returns <code>None</code>. Once <code>None</code> is
|
||
returned, stream will be terminated.</p>
|
||
<h1 id="examples-14" class="section-header"><a href="#examples-14">Examples</a></h1>
|
||
<div class="example-wrap"><pre class="rust rust-example-rendered">
|
||
<span class="kw">use</span> <span class="ident">futures</span>::<span class="ident">future</span>;
|
||
<span class="kw">use</span> <span class="ident">futures</span>::<span class="ident">stream</span>::{<span class="self">self</span>, <span class="ident">StreamExt</span>};
|
||
|
||
<span class="kw">let</span> <span class="ident">stream</span> <span class="op">=</span> <span class="ident">stream</span>::<span class="ident">iter</span>(<span class="number">1</span>..<span class="op">=</span><span class="number">10</span>);
|
||
|
||
<span class="kw">let</span> <span class="ident">stream</span> <span class="op">=</span> <span class="ident">stream</span>.<span class="ident">scan</span>(<span class="number">0</span>, <span class="op">|</span><span class="ident">state</span>, <span class="ident">x</span><span class="op">|</span> {
|
||
<span class="kw-2">*</span><span class="ident">state</span> <span class="op">+</span><span class="op">=</span> <span class="ident">x</span>;
|
||
<span class="ident">future</span>::<span class="ident">ready</span>(<span class="kw">if</span> <span class="kw-2">*</span><span class="ident">state</span> <span class="op"><</span> <span class="number">10</span> { <span class="prelude-val">Some</span>(<span class="ident">x</span>) } <span class="kw">else</span> { <span class="prelude-val">None</span> })
|
||
});
|
||
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="macro">vec</span><span class="macro">!</span>[<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>], <span class="ident">stream</span>.<span class="ident">collect</span>::<span class="op"><</span><span class="ident">Vec</span><span class="op"><</span><span class="kw">_</span><span class="op">></span><span class="op">></span>().<span class="kw">await</span>);</pre></div>
|
||
</div><h3 id="method.skip_while" class="method"><code>pub fn <a href="#method.skip_while" class="fnname">skip_while</a><Fut, F>(self, f: F) -> <a class="struct" href="../../futures/stream/struct.SkipWhile.html" title="struct futures::stream::SkipWhile">SkipWhile</a><Self, Fut, F> <span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(&Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>) -> Fut,<br> Fut: <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a><Output = <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>>, </span></code><a class="srclink" href="../../src/futures_util/stream/stream/mod.rs.html#752-756" title="goto source code">[src]</a></h3><div class="docblock"><p>Skip elements on this stream while the provided asynchronous predicate
|
||
resolves to <code>true</code>.</p>
|
||
<p>This function, like <code>Iterator::skip_while</code>, will skip elements on the
|
||
stream until the predicate <code>f</code> resolves to <code>false</code>. Once one element
|
||
returns <code>false</code>, all future elements will be returned from the underlying
|
||
stream.</p>
|
||
<h1 id="examples-15" class="section-header"><a href="#examples-15">Examples</a></h1>
|
||
<div class="example-wrap"><pre class="rust rust-example-rendered">
|
||
<span class="kw">use</span> <span class="ident">futures</span>::<span class="ident">future</span>;
|
||
<span class="kw">use</span> <span class="ident">futures</span>::<span class="ident">stream</span>::{<span class="self">self</span>, <span class="ident">StreamExt</span>};
|
||
|
||
<span class="kw">let</span> <span class="ident">stream</span> <span class="op">=</span> <span class="ident">stream</span>::<span class="ident">iter</span>(<span class="number">1</span>..<span class="op">=</span><span class="number">10</span>);
|
||
|
||
<span class="kw">let</span> <span class="ident">stream</span> <span class="op">=</span> <span class="ident">stream</span>.<span class="ident">skip_while</span>(<span class="op">|</span><span class="ident">x</span><span class="op">|</span> <span class="ident">future</span>::<span class="ident">ready</span>(<span class="kw-2">*</span><span class="ident">x</span> <span class="op"><</span><span class="op">=</span> <span class="number">5</span>));
|
||
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="macro">vec</span><span class="macro">!</span>[<span class="number">6</span>, <span class="number">7</span>, <span class="number">8</span>, <span class="number">9</span>, <span class="number">10</span>], <span class="ident">stream</span>.<span class="ident">collect</span>::<span class="op"><</span><span class="ident">Vec</span><span class="op"><</span><span class="kw">_</span><span class="op">></span><span class="op">></span>().<span class="kw">await</span>);</pre></div>
|
||
</div><h3 id="method.take_while" class="method"><code>pub fn <a href="#method.take_while" class="fnname">take_while</a><Fut, F>(self, f: F) -> <a class="struct" href="../../futures/stream/struct.TakeWhile.html" title="struct futures::stream::TakeWhile">TakeWhile</a><Self, Fut, F> <span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(&Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>) -> Fut,<br> Fut: <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a><Output = <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>>, </span></code><a class="srclink" href="../../src/futures_util/stream/stream/mod.rs.html#782-786" title="goto source code">[src]</a></h3><div class="docblock"><p>Take elements from this stream while the provided asynchronous predicate
|
||
resolves to <code>true</code>.</p>
|
||
<p>This function, like <code>Iterator::take_while</code>, will take elements from the
|
||
stream until the predicate <code>f</code> resolves to <code>false</code>. Once one element
|
||
returns <code>false</code>, it will always return that the stream is done.</p>
|
||
<h1 id="examples-16" class="section-header"><a href="#examples-16">Examples</a></h1>
|
||
<div class="example-wrap"><pre class="rust rust-example-rendered">
|
||
<span class="kw">use</span> <span class="ident">futures</span>::<span class="ident">future</span>;
|
||
<span class="kw">use</span> <span class="ident">futures</span>::<span class="ident">stream</span>::{<span class="self">self</span>, <span class="ident">StreamExt</span>};
|
||
|
||
<span class="kw">let</span> <span class="ident">stream</span> <span class="op">=</span> <span class="ident">stream</span>::<span class="ident">iter</span>(<span class="number">1</span>..<span class="op">=</span><span class="number">10</span>);
|
||
|
||
<span class="kw">let</span> <span class="ident">stream</span> <span class="op">=</span> <span class="ident">stream</span>.<span class="ident">take_while</span>(<span class="op">|</span><span class="ident">x</span><span class="op">|</span> <span class="ident">future</span>::<span class="ident">ready</span>(<span class="kw-2">*</span><span class="ident">x</span> <span class="op"><</span><span class="op">=</span> <span class="number">5</span>));
|
||
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="macro">vec</span><span class="macro">!</span>[<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>], <span class="ident">stream</span>.<span class="ident">collect</span>::<span class="op"><</span><span class="ident">Vec</span><span class="op"><</span><span class="kw">_</span><span class="op">></span><span class="op">></span>().<span class="kw">await</span>);</pre></div>
|
||
</div><h3 id="method.take_until" class="method"><code>pub fn <a href="#method.take_until" class="fnname">take_until</a><Fut>(self, fut: Fut) -> <a class="struct" href="../../futures/stream/struct.TakeUntil.html" title="struct futures::stream::TakeUntil">TakeUntil</a><Self, Fut> <span class="where fmt-newline">where<br> Fut: <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a>, </span></code><a class="srclink" href="../../src/futures_util/stream/stream/mod.rs.html#827-830" title="goto source code">[src]</a></h3><div class="docblock"><p>Take elements from this stream until the provided future resolves.</p>
|
||
<p>This function will take elements from the stream until the provided
|
||
stopping future <code>fut</code> resolves. Once the <code>fut</code> future becomes ready,
|
||
this stream combinator will always return that the stream is done.</p>
|
||
<p>The stopping future may return any type. Once the stream is stopped
|
||
the result of the stopping future may be accessed with <code>TakeUntil::take_result()</code>.
|
||
The stream may also be resumed with <code>TakeUntil::take_future()</code>.
|
||
See the documentation of <a href="../../futures/stream/struct.TakeUntil.html" title="TakeUntil"><code>TakeUntil</code></a> for more information.</p>
|
||
<h1 id="examples-17" class="section-header"><a href="#examples-17">Examples</a></h1>
|
||
<div class="example-wrap"><pre class="rust rust-example-rendered">
|
||
<span class="kw">use</span> <span class="ident">futures</span>::<span class="ident">future</span>;
|
||
<span class="kw">use</span> <span class="ident">futures</span>::<span class="ident">stream</span>::{<span class="self">self</span>, <span class="ident">StreamExt</span>};
|
||
<span class="kw">use</span> <span class="ident">futures</span>::<span class="ident">task</span>::<span class="ident">Poll</span>;
|
||
|
||
<span class="kw">let</span> <span class="ident">stream</span> <span class="op">=</span> <span class="ident">stream</span>::<span class="ident">iter</span>(<span class="number">1</span>..<span class="op">=</span><span class="number">10</span>);
|
||
|
||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">i</span> <span class="op">=</span> <span class="number">0</span>;
|
||
<span class="kw">let</span> <span class="ident">stop_fut</span> <span class="op">=</span> <span class="ident">future</span>::<span class="ident">poll_fn</span>(<span class="op">|</span><span class="ident">_cx</span><span class="op">|</span> {
|
||
<span class="ident">i</span> <span class="op">+</span><span class="op">=</span> <span class="number">1</span>;
|
||
<span class="kw">if</span> <span class="ident">i</span> <span class="op"><</span><span class="op">=</span> <span class="number">5</span> {
|
||
<span class="ident">Poll</span>::<span class="ident">Pending</span>
|
||
} <span class="kw">else</span> {
|
||
<span class="ident">Poll</span>::<span class="ident">Ready</span>(())
|
||
}
|
||
});
|
||
|
||
<span class="kw">let</span> <span class="ident">stream</span> <span class="op">=</span> <span class="ident">stream</span>.<span class="ident">take_until</span>(<span class="ident">stop_fut</span>);
|
||
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="macro">vec</span><span class="macro">!</span>[<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>], <span class="ident">stream</span>.<span class="ident">collect</span>::<span class="op"><</span><span class="ident">Vec</span><span class="op"><</span><span class="kw">_</span><span class="op">></span><span class="op">></span>().<span class="kw">await</span>);</pre></div>
|
||
</div><h3 id="method.for_each" class="method"><code>pub fn <a href="#method.for_each" class="fnname">for_each</a><Fut, F>(self, f: F) -> <a class="struct" href="../../futures/stream/struct.ForEach.html" title="struct futures::stream::ForEach">ForEach</a><Self, Fut, F><span class="notable-traits"><span class="notable-traits-tooltip">ⓘ<div class="notable-traits-tooltiptext"><span class="docblock"><h3 class="notable">Notable traits for <a class="struct" href="../../futures/stream/struct.ForEach.html" title="struct futures::stream::ForEach">ForEach</a><St, Fut, F></h3><code class="content"><span class="where fmt-newline">impl<St, Fut, F> <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a> for <a class="struct" href="../../futures/stream/struct.ForEach.html" title="struct futures::stream::ForEach">ForEach</a><St, Fut, F> <span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<St as <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a>>::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>) -> Fut,<br> Fut: <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a><Output = <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>>,<br> St: <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a>, </span></span><span class="where fmt-newline"> type <a href="../../futures/future/trait.Future.html#associatedtype.Output" class="type">Output</a> = <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>;</span></code></span></div></span></span> <span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>) -> Fut,<br> Fut: <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a><Output = <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>>, </span></code><a class="srclink" href="../../src/futures_util/stream/stream/mod.rs.html#868-872" title="goto source code">[src]</a></h3><div class="docblock"><p>Runs this stream to completion, executing the provided asynchronous
|
||
closure for each element on the stream.</p>
|
||
<p>The closure provided will be called for each item this stream produces,
|
||
yielding a future. That future will then be executed to completion
|
||
before moving on to the next item.</p>
|
||
<p>The returned value is a <code>Future</code> where the <code>Output</code> type is <code>()</code>; it is
|
||
executed entirely for its side effects.</p>
|
||
<p>To process each item in the stream and produce another stream instead
|
||
of a single future, use <code>then</code> instead.</p>
|
||
<h1 id="examples-18" class="section-header"><a href="#examples-18">Examples</a></h1>
|
||
<div class="example-wrap"><pre class="rust rust-example-rendered">
|
||
<span class="kw">use</span> <span class="ident">futures</span>::<span class="ident">future</span>;
|
||
<span class="kw">use</span> <span class="ident">futures</span>::<span class="ident">stream</span>::{<span class="self">self</span>, <span class="ident">StreamExt</span>};
|
||
|
||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">x</span> <span class="op">=</span> <span class="number">0</span>;
|
||
|
||
{
|
||
<span class="kw">let</span> <span class="ident">fut</span> <span class="op">=</span> <span class="ident">stream</span>::<span class="ident">repeat</span>(<span class="number">1</span>).<span class="ident">take</span>(<span class="number">3</span>).<span class="ident">for_each</span>(<span class="op">|</span><span class="ident">item</span><span class="op">|</span> {
|
||
<span class="ident">x</span> <span class="op">+</span><span class="op">=</span> <span class="ident">item</span>;
|
||
<span class="ident">future</span>::<span class="ident">ready</span>(())
|
||
});
|
||
<span class="ident">fut</span>.<span class="kw">await</span>;
|
||
}
|
||
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">x</span>, <span class="number">3</span>);</pre></div>
|
||
</div><h3 id="method.for_each_concurrent" class="method"><code>pub fn <a href="#method.for_each_concurrent" class="fnname">for_each_concurrent</a><Fut, F>(<br> self, <br> limit: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a><<a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>>>, <br> f: F<br>) -> <a class="struct" href="../../futures/stream/struct.ForEachConcurrent.html" title="struct futures::stream::ForEachConcurrent">ForEachConcurrent</a><Self, Fut, F><span class="notable-traits"><span class="notable-traits-tooltip">ⓘ<div class="notable-traits-tooltiptext"><span class="docblock"><h3 class="notable">Notable traits for <a class="struct" href="../../futures/stream/struct.ForEachConcurrent.html" title="struct futures::stream::ForEachConcurrent">ForEachConcurrent</a><St, Fut, F></h3><code class="content"><span class="where fmt-newline">impl<St, Fut, F> <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a> for <a class="struct" href="../../futures/stream/struct.ForEachConcurrent.html" title="struct futures::stream::ForEachConcurrent">ForEachConcurrent</a><St, Fut, F> <span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<St as <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a>>::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>) -> Fut,<br> Fut: <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a><Output = <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>>,<br> St: <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a>, </span></span><span class="where fmt-newline"> type <a href="../../futures/future/trait.Future.html#associatedtype.Output" class="type">Output</a> = <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>;</span></code></span></div></span></span> <span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>) -> Fut,<br> Fut: <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a><Output = <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>>, </span></code><a class="srclink" href="../../src/futures_util/stream/stream/mod.rs.html#924-932" title="goto source code">[src]</a></h3><div class="docblock"><p>Runs this stream to completion, executing the provided asynchronous
|
||
closure for each element on the stream concurrently as elements become
|
||
available.</p>
|
||
<p>This is similar to <a href="../../futures/stream/trait.StreamExt.html#method.for_each" title="StreamExt::for_each"><code>StreamExt::for_each</code></a>, but the futures
|
||
produced by the closure are run concurrently (but not in parallel--
|
||
this combinator does not introduce any threads).</p>
|
||
<p>The closure provided will be called for each item this stream produces,
|
||
yielding a future. That future will then be executed to completion
|
||
concurrently with the other futures produced by the closure.</p>
|
||
<p>The first argument is an optional limit on the number of concurrent
|
||
futures. If this limit is not <code>None</code>, no more than <code>limit</code> futures
|
||
will be run concurrently. The <code>limit</code> argument is of type
|
||
<code>Into<Option<usize>></code>, and so can be provided as either <code>None</code>,
|
||
<code>Some(10)</code>, or just <code>10</code>. Note: a limit of zero is interpreted as
|
||
no limit at all, and will have the same result as passing in <code>None</code>.</p>
|
||
<p>This method is only available when the <code>std</code> or <code>alloc</code> feature of this
|
||
library is activated, and it is activated by default.</p>
|
||
<h1 id="examples-19" class="section-header"><a href="#examples-19">Examples</a></h1>
|
||
<div class="example-wrap"><pre class="rust rust-example-rendered">
|
||
<span class="kw">use</span> <span class="ident">futures</span>::<span class="ident">channel</span>::<span class="ident">oneshot</span>;
|
||
<span class="kw">use</span> <span class="ident">futures</span>::<span class="ident">stream</span>::{<span class="self">self</span>, <span class="ident">StreamExt</span>};
|
||
|
||
<span class="kw">let</span> (<span class="ident">tx1</span>, <span class="ident">rx1</span>) <span class="op">=</span> <span class="ident">oneshot</span>::<span class="ident">channel</span>();
|
||
<span class="kw">let</span> (<span class="ident">tx2</span>, <span class="ident">rx2</span>) <span class="op">=</span> <span class="ident">oneshot</span>::<span class="ident">channel</span>();
|
||
<span class="kw">let</span> (<span class="ident">tx3</span>, <span class="ident">rx3</span>) <span class="op">=</span> <span class="ident">oneshot</span>::<span class="ident">channel</span>();
|
||
|
||
<span class="kw">let</span> <span class="ident">fut</span> <span class="op">=</span> <span class="ident">stream</span>::<span class="ident">iter</span>(<span class="macro">vec</span><span class="macro">!</span>[<span class="ident">rx1</span>, <span class="ident">rx2</span>, <span class="ident">rx3</span>]).<span class="ident">for_each_concurrent</span>(
|
||
<span class="comment">/* limit */</span> <span class="number">2</span>,
|
||
<span class="op">|</span><span class="ident">rx</span><span class="op">|</span> <span class="kw">async</span> <span class="kw">move</span> {
|
||
<span class="ident">rx</span>.<span class="kw">await</span>.<span class="ident">unwrap</span>();
|
||
}
|
||
);
|
||
<span class="ident">tx1</span>.<span class="ident">send</span>(()).<span class="ident">unwrap</span>();
|
||
<span class="ident">tx2</span>.<span class="ident">send</span>(()).<span class="ident">unwrap</span>();
|
||
<span class="ident">tx3</span>.<span class="ident">send</span>(()).<span class="ident">unwrap</span>();
|
||
<span class="ident">fut</span>.<span class="kw">await</span>;</pre></div>
|
||
</div><h3 id="method.take" class="method"><code>pub fn <a href="#method.take" class="fnname">take</a>(self, n: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -> <a class="struct" href="../../futures/stream/struct.Take.html" title="struct futures::stream::Take">Take</a><Self></code><a class="srclink" href="../../src/futures_util/stream/stream/mod.rs.html#953-955" title="goto source code">[src]</a></h3><div class="docblock"><p>Creates a new stream of at most <code>n</code> items of the underlying stream.</p>
|
||
<p>Once <code>n</code> items have been yielded from this stream then it will always
|
||
return that the stream is done.</p>
|
||
<h1 id="examples-20" class="section-header"><a href="#examples-20">Examples</a></h1>
|
||
<div class="example-wrap"><pre class="rust rust-example-rendered">
|
||
<span class="kw">use</span> <span class="ident">futures</span>::<span class="ident">stream</span>::{<span class="self">self</span>, <span class="ident">StreamExt</span>};
|
||
|
||
<span class="kw">let</span> <span class="ident">stream</span> <span class="op">=</span> <span class="ident">stream</span>::<span class="ident">iter</span>(<span class="number">1</span>..<span class="op">=</span><span class="number">10</span>).<span class="ident">take</span>(<span class="number">3</span>);
|
||
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="macro">vec</span><span class="macro">!</span>[<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>], <span class="ident">stream</span>.<span class="ident">collect</span>::<span class="op"><</span><span class="ident">Vec</span><span class="op"><</span><span class="kw">_</span><span class="op">></span><span class="op">></span>().<span class="kw">await</span>);</pre></div>
|
||
</div><h3 id="method.skip" class="method"><code>pub fn <a href="#method.skip" class="fnname">skip</a>(self, n: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -> <a class="struct" href="../../futures/stream/struct.Skip.html" title="struct futures::stream::Skip">Skip</a><Self></code><a class="srclink" href="../../src/futures_util/stream/stream/mod.rs.html#976-978" title="goto source code">[src]</a></h3><div class="docblock"><p>Creates a new stream which skips <code>n</code> items of the underlying stream.</p>
|
||
<p>Once <code>n</code> items have been skipped from this stream then it will always
|
||
return the remaining items on this stream.</p>
|
||
<h1 id="examples-21" class="section-header"><a href="#examples-21">Examples</a></h1>
|
||
<div class="example-wrap"><pre class="rust rust-example-rendered">
|
||
<span class="kw">use</span> <span class="ident">futures</span>::<span class="ident">stream</span>::{<span class="self">self</span>, <span class="ident">StreamExt</span>};
|
||
|
||
<span class="kw">let</span> <span class="ident">stream</span> <span class="op">=</span> <span class="ident">stream</span>::<span class="ident">iter</span>(<span class="number">1</span>..<span class="op">=</span><span class="number">10</span>).<span class="ident">skip</span>(<span class="number">5</span>);
|
||
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="macro">vec</span><span class="macro">!</span>[<span class="number">6</span>, <span class="number">7</span>, <span class="number">8</span>, <span class="number">9</span>, <span class="number">10</span>], <span class="ident">stream</span>.<span class="ident">collect</span>::<span class="op"><</span><span class="ident">Vec</span><span class="op"><</span><span class="kw">_</span><span class="op">></span><span class="op">></span>().<span class="kw">await</span>);</pre></div>
|
||
</div><h3 id="method.fuse" class="method"><code>pub fn <a href="#method.fuse" class="fnname">fuse</a>(self) -> <a class="struct" href="../../futures/stream/struct.Fuse.html" title="struct futures::stream::Fuse">Fuse</a><Self></code><a class="srclink" href="../../src/futures_util/stream/stream/mod.rs.html#1022-1024" title="goto source code">[src]</a></h3><div class="docblock"><p>Fuse a stream such that <a href="../../futures/stream/trait.Stream.html#tymethod.poll_next"><code>poll_next</code></a> will never
|
||
again be called once it has finished. This method can be used to turn
|
||
any <code>Stream</code> into a <code>FusedStream</code>.</p>
|
||
<p>Normally, once a stream has returned <a href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html#variant.None" title="None"><code>None</code></a> from
|
||
<a href="../../futures/stream/trait.Stream.html#tymethod.poll_next"><code>poll_next</code></a> any further calls could exhibit bad
|
||
behavior such as block forever, panic, never return, etc. If it is known
|
||
that <a href="../../futures/stream/trait.Stream.html#tymethod.poll_next"><code>poll_next</code></a> may be called after stream
|
||
has already finished, then this method can be used to ensure that it has
|
||
defined semantics.</p>
|
||
<p>The <a href="../../futures/stream/trait.Stream.html#tymethod.poll_next"><code>poll_next</code></a> method of a <code>fuse</code>d stream
|
||
is guaranteed to return <a href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html#variant.None" title="None"><code>None</code></a> after the underlying stream has
|
||
finished.</p>
|
||
<h1 id="examples-22" class="section-header"><a href="#examples-22">Examples</a></h1>
|
||
<div class="example-wrap"><pre class="rust rust-example-rendered">
|
||
<span class="kw">use</span> <span class="ident">futures</span>::<span class="ident">executor</span>::<span class="ident">block_on_stream</span>;
|
||
<span class="kw">use</span> <span class="ident">futures</span>::<span class="ident">stream</span>::{<span class="self">self</span>, <span class="ident">StreamExt</span>};
|
||
<span class="kw">use</span> <span class="ident">futures</span>::<span class="ident">task</span>::<span class="ident">Poll</span>;
|
||
|
||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">x</span> <span class="op">=</span> <span class="number">0</span>;
|
||
<span class="kw">let</span> <span class="ident">stream</span> <span class="op">=</span> <span class="ident">stream</span>::<span class="ident">poll_fn</span>(<span class="op">|</span><span class="kw">_</span><span class="op">|</span> {
|
||
<span class="ident">x</span> <span class="op">+</span><span class="op">=</span> <span class="number">1</span>;
|
||
<span class="kw">match</span> <span class="ident">x</span> {
|
||
<span class="number">0</span>..<span class="op">=</span><span class="number">2</span> <span class="op">=</span><span class="op">></span> <span class="ident">Poll</span>::<span class="ident">Ready</span>(<span class="prelude-val">Some</span>(<span class="ident">x</span>)),
|
||
<span class="number">3</span> <span class="op">=</span><span class="op">></span> <span class="ident">Poll</span>::<span class="ident">Ready</span>(<span class="prelude-val">None</span>),
|
||
<span class="kw">_</span> <span class="op">=</span><span class="op">></span> <span class="macro">panic</span><span class="macro">!</span>(<span class="string">"should not happen"</span>)
|
||
}
|
||
}).<span class="ident">fuse</span>();
|
||
|
||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">iter</span> <span class="op">=</span> <span class="ident">block_on_stream</span>(<span class="ident">stream</span>);
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="prelude-val">Some</span>(<span class="number">1</span>), <span class="ident">iter</span>.<span class="ident">next</span>());
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="prelude-val">Some</span>(<span class="number">2</span>), <span class="ident">iter</span>.<span class="ident">next</span>());
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="prelude-val">None</span>, <span class="ident">iter</span>.<span class="ident">next</span>());
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="prelude-val">None</span>, <span class="ident">iter</span>.<span class="ident">next</span>());
|
||
<span class="comment">// ...</span></pre></div>
|
||
</div><h3 id="method.by_ref" class="method"><code>pub fn <a href="#method.by_ref" class="fnname">by_ref</a>(&mut self) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&mut </a>Self<span class="notable-traits"><span class="notable-traits-tooltip">ⓘ<div class="notable-traits-tooltiptext"><span class="docblock"><h3 class="notable">Notable traits for <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&'_ mut </a>F</h3><code class="content"><span class="where fmt-newline">impl<'_, F> <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a> for <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&'_ mut </a>F <span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a> + <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a> + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>, </span></span><span class="where fmt-newline"> type <a href="../../futures/future/trait.Future.html#associatedtype.Output" class="type">Output</a> = <F as <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a>>::<a class="type" href="../../futures/future/trait.Future.html#associatedtype.Output" title="type futures::future::Future::Output">Output</a>;</span></code></span></div></span></span></code><a class="srclink" href="../../src/futures_util/stream/stream/mod.rs.html#1055" title="goto source code">[src]</a></h3><div class="docblock"><p>Borrows a stream, rather than consuming it.</p>
|
||
<p>This is useful to allow applying stream adaptors while still retaining
|
||
ownership of the original stream.</p>
|
||
<h1 id="examples-23" class="section-header"><a href="#examples-23">Examples</a></h1>
|
||
<div class="example-wrap"><pre class="rust rust-example-rendered">
|
||
<span class="kw">use</span> <span class="ident">futures</span>::<span class="ident">stream</span>::{<span class="self">self</span>, <span class="ident">StreamExt</span>};
|
||
|
||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">stream</span> <span class="op">=</span> <span class="ident">stream</span>::<span class="ident">iter</span>(<span class="number">1</span>..<span class="number">5</span>);
|
||
|
||
<span class="kw">let</span> <span class="ident">sum</span> <span class="op">=</span> <span class="ident">stream</span>.<span class="ident">by_ref</span>()
|
||
.<span class="ident">take</span>(<span class="number">2</span>)
|
||
.<span class="ident">fold</span>(<span class="number">0</span>, <span class="op">|</span><span class="ident">a</span>, <span class="ident">b</span><span class="op">|</span> <span class="kw">async</span> <span class="kw">move</span> { <span class="ident">a</span> <span class="op">+</span> <span class="ident">b</span> })
|
||
.<span class="kw">await</span>;
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">sum</span>, <span class="number">3</span>);
|
||
|
||
<span class="comment">// You can use the stream again</span>
|
||
<span class="kw">let</span> <span class="ident">sum</span> <span class="op">=</span> <span class="ident">stream</span>.<span class="ident">take</span>(<span class="number">2</span>)
|
||
.<span class="ident">fold</span>(<span class="number">0</span>, <span class="op">|</span><span class="ident">a</span>, <span class="ident">b</span><span class="op">|</span> <span class="kw">async</span> <span class="kw">move</span> { <span class="ident">a</span> <span class="op">+</span> <span class="ident">b</span> })
|
||
.<span class="kw">await</span>;
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">sum</span>, <span class="number">7</span>);</pre></div>
|
||
</div><h3 id="method.catch_unwind" class="method"><code>pub fn <a href="#method.catch_unwind" class="fnname">catch_unwind</a>(self) -> <a class="struct" href="../../futures/stream/struct.CatchUnwind.html" title="struct futures::stream::CatchUnwind">CatchUnwind</a><Self> <span class="where fmt-newline">where<br> Self: <a class="trait" href="https://doc.rust-lang.org/nightly/std/panic/trait.UnwindSafe.html" title="trait std::panic::UnwindSafe">UnwindSafe</a>, </span></code><a class="srclink" href="../../src/futures_util/stream/stream/mod.rs.html#1100-1102" title="goto source code">[src]</a></h3><div class="docblock"><p>Catches unwinding panics while polling the stream.</p>
|
||
<p>Caught panic (if any) will be the last element of the resulting stream.</p>
|
||
<p>In general, panics within a stream can propagate all the way out to the
|
||
task level. This combinator makes it possible to halt unwinding within
|
||
the stream itself. It's most commonly used within task executors. This
|
||
method should not be used for error handling.</p>
|
||
<p>Note that this method requires the <code>UnwindSafe</code> bound from the standard
|
||
library. This isn't always applied automatically, and the standard
|
||
library provides an <code>AssertUnwindSafe</code> wrapper type to apply it
|
||
after-the fact. To assist using this method, the <a href="../../futures/stream/trait.Stream.html" title="Stream"><code>Stream</code></a> trait is
|
||
also implemented for <code>AssertUnwindSafe<St></code> where <code>St</code> implements
|
||
<a href="../../futures/stream/trait.Stream.html" title="Stream"><code>Stream</code></a>.</p>
|
||
<p>This method is only available when the <code>std</code> feature of this
|
||
library is activated, and it is activated by default.</p>
|
||
<h1 id="examples-24" class="section-header"><a href="#examples-24">Examples</a></h1>
|
||
<div class="example-wrap"><pre class="rust rust-example-rendered">
|
||
<span class="kw">use</span> <span class="ident">futures</span>::<span class="ident">stream</span>::{<span class="self">self</span>, <span class="ident">StreamExt</span>};
|
||
|
||
<span class="kw">let</span> <span class="ident">stream</span> <span class="op">=</span> <span class="ident">stream</span>::<span class="ident">iter</span>(<span class="macro">vec</span><span class="macro">!</span>[<span class="prelude-val">Some</span>(<span class="number">10</span>), <span class="prelude-val">None</span>, <span class="prelude-val">Some</span>(<span class="number">11</span>)]);
|
||
<span class="comment">// Panic on second element</span>
|
||
<span class="kw">let</span> <span class="ident">stream_panicking</span> <span class="op">=</span> <span class="ident">stream</span>.<span class="ident">map</span>(<span class="op">|</span><span class="ident">o</span><span class="op">|</span> <span class="ident">o</span>.<span class="ident">unwrap</span>());
|
||
<span class="comment">// Collect all the results</span>
|
||
<span class="kw">let</span> <span class="ident">stream</span> <span class="op">=</span> <span class="ident">stream_panicking</span>.<span class="ident">catch_unwind</span>();
|
||
|
||
<span class="kw">let</span> <span class="ident">results</span>: <span class="ident">Vec</span><span class="op"><</span><span class="prelude-ty">Result</span><span class="op"><</span><span class="ident">i32</span>, <span class="kw">_</span><span class="op">></span><span class="op">></span> <span class="op">=</span> <span class="ident">stream</span>.<span class="ident">collect</span>().<span class="kw">await</span>;
|
||
<span class="kw">match</span> <span class="ident">results</span>[<span class="number">0</span>] {
|
||
<span class="prelude-val">Ok</span>(<span class="number">10</span>) <span class="op">=</span><span class="op">></span> {}
|
||
<span class="kw">_</span> <span class="op">=</span><span class="op">></span> <span class="macro">panic</span><span class="macro">!</span>(<span class="string">"unexpected result!"</span>),
|
||
}
|
||
<span class="macro">assert</span><span class="macro">!</span>(<span class="ident">results</span>[<span class="number">1</span>].<span class="ident">is_err</span>());
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">results</span>.<span class="ident">len</span>(), <span class="number">2</span>);</pre></div>
|
||
</div><h3 id="method.boxed" class="method"><code>pub fn <a href="#method.boxed" class="fnname">boxed</a><'a>(<br> self<br>) -> <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a><<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a><dyn <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a><Item = Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>> + 'a + <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a>, <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/alloc/struct.Global.html" title="struct alloc::alloc::Global">Global</a>>><span class="notable-traits"><span class="notable-traits-tooltip">ⓘ<div class="notable-traits-tooltiptext"><span class="docblock"><h3 class="notable">Notable traits for <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a><P></h3><code class="content"><span class="where fmt-newline">impl<P> <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a> for <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a><P> <span class="where fmt-newline">where<br> P: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.DerefMut.html" title="trait core::ops::deref::DerefMut">DerefMut</a>,<br> <P as <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a>>::<a class="type" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html#associatedtype.Target" title="type core::ops::deref::Deref::Target">Target</a>: <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a>, </span></span><span class="where fmt-newline"> type <a href="../../futures/future/trait.Future.html#associatedtype.Output" class="type">Output</a> = <<P as <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a>>::<a class="type" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html#associatedtype.Target" title="type core::ops::deref::Deref::Target">Target</a> as <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a>>::<a class="type" href="../../futures/future/trait.Future.html#associatedtype.Output" title="type futures::future::Future::Output">Output</a>;</span></code></span></div></span></span> <span class="where fmt-newline">where<br> Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> + 'a, </span></code><a class="srclink" href="../../src/futures_util/stream/stream/mod.rs.html#1112-1114" title="goto source code">[src]</a></h3><div class="docblock"><p>Wrap the stream in a Box, pinning it.</p>
|
||
<p>This method is only available when the <code>std</code> or <code>alloc</code> feature of this
|
||
library is activated, and it is activated by default.</p>
|
||
</div><h3 id="method.boxed_local" class="method"><code>pub fn <a href="#method.boxed_local" class="fnname">boxed_local</a><'a>(<br> self<br>) -> <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a><<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a><dyn <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a><Item = Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>> + 'a, <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/alloc/struct.Global.html" title="struct alloc::alloc::Global">Global</a>>><span class="notable-traits"><span class="notable-traits-tooltip">ⓘ<div class="notable-traits-tooltiptext"><span class="docblock"><h3 class="notable">Notable traits for <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a><P></h3><code class="content"><span class="where fmt-newline">impl<P> <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a> for <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a><P> <span class="where fmt-newline">where<br> P: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.DerefMut.html" title="trait core::ops::deref::DerefMut">DerefMut</a>,<br> <P as <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a>>::<a class="type" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html#associatedtype.Target" title="type core::ops::deref::Deref::Target">Target</a>: <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a>, </span></span><span class="where fmt-newline"> type <a href="../../futures/future/trait.Future.html#associatedtype.Output" class="type">Output</a> = <<P as <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a>>::<a class="type" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html#associatedtype.Target" title="type core::ops::deref::Deref::Target">Target</a> as <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a>>::<a class="type" href="../../futures/future/trait.Future.html#associatedtype.Output" title="type futures::future::Future::Output">Output</a>;</span></code></span></div></span></span> <span class="where fmt-newline">where<br> Self: 'a, </span></code><a class="srclink" href="../../src/futures_util/stream/stream/mod.rs.html#1126-1128" title="goto source code">[src]</a></h3><div class="docblock"><p>Wrap the stream in a Box, pinning it.</p>
|
||
<p>Similar to <code>boxed</code>, but without the <code>Send</code> requirement.</p>
|
||
<p>This method is only available when the <code>std</code> or <code>alloc</code> feature of this
|
||
library is activated, and it is activated by default.</p>
|
||
</div><h3 id="method.buffered" class="method"><code>pub fn <a href="#method.buffered" class="fnname">buffered</a>(self, n: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -> <a class="struct" href="../../futures/stream/struct.Buffered.html" title="struct futures::stream::Buffered">Buffered</a><Self> <span class="where fmt-newline">where<br> Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>: <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a>, </span></code><a class="srclink" href="../../src/futures_util/stream/stream/mod.rs.html#1147-1150" title="goto source code">[src]</a></h3><div class="docblock"><p>An adaptor for creating a buffered list of pending futures.</p>
|
||
<p>If this stream's item can be converted into a future, then this adaptor
|
||
will buffer up to at most <code>n</code> futures and then return the outputs in the
|
||
same order as the underlying stream. No more than <code>n</code> futures will be
|
||
buffered at any point in time, and less than <code>n</code> may also be buffered
|
||
depending on the state of each future.</p>
|
||
<p>The returned stream will be a stream of each future's output.</p>
|
||
<p>This method is only available when the <code>std</code> or <code>alloc</code> feature of this
|
||
library is activated, and it is activated by default.</p>
|
||
</div><h3 id="method.buffer_unordered" class="method"><code>pub fn <a href="#method.buffer_unordered" class="fnname">buffer_unordered</a>(self, n: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -> <a class="struct" href="../../futures/stream/struct.BufferUnordered.html" title="struct futures::stream::BufferUnordered">BufferUnordered</a><Self> <span class="where fmt-newline">where<br> Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>: <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a>, </span></code><a class="srclink" href="../../src/futures_util/stream/stream/mod.rs.html#1192-1195" title="goto source code">[src]</a></h3><div class="docblock"><p>An adaptor for creating a buffered list of pending futures (unordered).</p>
|
||
<p>If this stream's item can be converted into a future, then this adaptor
|
||
will buffer up to <code>n</code> futures and then return the outputs in the order
|
||
in which they complete. No more than <code>n</code> futures will be buffered at
|
||
any point in time, and less than <code>n</code> may also be buffered depending on
|
||
the state of each future.</p>
|
||
<p>The returned stream will be a stream of each future's output.</p>
|
||
<p>This method is only available when the <code>std</code> or <code>alloc</code> feature of this
|
||
library is activated, and it is activated by default.</p>
|
||
<h1 id="examples-25" class="section-header"><a href="#examples-25">Examples</a></h1>
|
||
<div class="example-wrap"><pre class="rust rust-example-rendered">
|
||
<span class="kw">use</span> <span class="ident">futures</span>::<span class="ident">channel</span>::<span class="ident">oneshot</span>;
|
||
<span class="kw">use</span> <span class="ident">futures</span>::<span class="ident">stream</span>::{<span class="self">self</span>, <span class="ident">StreamExt</span>};
|
||
|
||
<span class="kw">let</span> (<span class="ident">send_one</span>, <span class="ident">recv_one</span>) <span class="op">=</span> <span class="ident">oneshot</span>::<span class="ident">channel</span>();
|
||
<span class="kw">let</span> (<span class="ident">send_two</span>, <span class="ident">recv_two</span>) <span class="op">=</span> <span class="ident">oneshot</span>::<span class="ident">channel</span>();
|
||
|
||
<span class="kw">let</span> <span class="ident">stream_of_futures</span> <span class="op">=</span> <span class="ident">stream</span>::<span class="ident">iter</span>(<span class="macro">vec</span><span class="macro">!</span>[<span class="ident">recv_one</span>, <span class="ident">recv_two</span>]);
|
||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">buffered</span> <span class="op">=</span> <span class="ident">stream_of_futures</span>.<span class="ident">buffer_unordered</span>(<span class="number">10</span>);
|
||
|
||
<span class="ident">send_two</span>.<span class="ident">send</span>(<span class="number">2i32</span>)<span class="question-mark">?</span>;
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">buffered</span>.<span class="ident">next</span>().<span class="kw">await</span>, <span class="prelude-val">Some</span>(<span class="prelude-val">Ok</span>(<span class="number">2i32</span>)));
|
||
|
||
<span class="ident">send_one</span>.<span class="ident">send</span>(<span class="number">1i32</span>)<span class="question-mark">?</span>;
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">buffered</span>.<span class="ident">next</span>().<span class="kw">await</span>, <span class="prelude-val">Some</span>(<span class="prelude-val">Ok</span>(<span class="number">1i32</span>)));
|
||
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">buffered</span>.<span class="ident">next</span>().<span class="kw">await</span>, <span class="prelude-val">None</span>);</pre></div>
|
||
</div><h3 id="method.zip" class="method"><code>pub fn <a href="#method.zip" class="fnname">zip</a><St>(self, other: St) -> <a class="struct" href="../../futures/stream/struct.Zip.html" title="struct futures::stream::Zip">Zip</a><Self, St> <span class="where fmt-newline">where<br> St: <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a>, </span></code><a class="srclink" href="../../src/futures_util/stream/stream/mod.rs.html#1222-1225" title="goto source code">[src]</a></h3><div class="docblock"><p>An adapter for zipping two streams together.</p>
|
||
<p>The zipped stream waits for both streams to produce an item, and then
|
||
returns that pair. If either stream ends then the zipped stream will
|
||
also end.</p>
|
||
<h1 id="examples-26" class="section-header"><a href="#examples-26">Examples</a></h1>
|
||
<div class="example-wrap"><pre class="rust rust-example-rendered">
|
||
<span class="kw">use</span> <span class="ident">futures</span>::<span class="ident">stream</span>::{<span class="self">self</span>, <span class="ident">StreamExt</span>};
|
||
|
||
<span class="kw">let</span> <span class="ident">stream1</span> <span class="op">=</span> <span class="ident">stream</span>::<span class="ident">iter</span>(<span class="number">1</span>..<span class="op">=</span><span class="number">3</span>);
|
||
<span class="kw">let</span> <span class="ident">stream2</span> <span class="op">=</span> <span class="ident">stream</span>::<span class="ident">iter</span>(<span class="number">5</span>..<span class="op">=</span><span class="number">10</span>);
|
||
|
||
<span class="kw">let</span> <span class="ident">vec</span> <span class="op">=</span> <span class="ident">stream1</span>.<span class="ident">zip</span>(<span class="ident">stream2</span>)
|
||
.<span class="ident">collect</span>::<span class="op"><</span><span class="ident">Vec</span><span class="op"><</span><span class="kw">_</span><span class="op">></span><span class="op">></span>()
|
||
.<span class="kw">await</span>;
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="macro">vec</span><span class="macro">!</span>[(<span class="number">1</span>, <span class="number">5</span>), (<span class="number">2</span>, <span class="number">6</span>), (<span class="number">3</span>, <span class="number">7</span>)], <span class="ident">vec</span>);</pre></div>
|
||
</div><h3 id="method.chain" class="method"><code>pub fn <a href="#method.chain" class="fnname">chain</a><St>(self, other: St) -> <a class="struct" href="../../futures/stream/struct.Chain.html" title="struct futures::stream::Chain">Chain</a><Self, St> <span class="where fmt-newline">where<br> St: <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a><Item = Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>>, </span></code><a class="srclink" href="../../src/futures_util/stream/stream/mod.rs.html#1253-1256" title="goto source code">[src]</a></h3><div class="docblock"><p>Adapter for chaining two streams.</p>
|
||
<p>The resulting stream emits elements from the first stream, and when
|
||
first stream reaches the end, emits the elements from the second stream.</p>
|
||
|
||
<div class="example-wrap"><pre class="rust rust-example-rendered">
|
||
<span class="kw">use</span> <span class="ident">futures</span>::<span class="ident">stream</span>::{<span class="self">self</span>, <span class="ident">StreamExt</span>};
|
||
|
||
<span class="kw">let</span> <span class="ident">stream1</span> <span class="op">=</span> <span class="ident">stream</span>::<span class="ident">iter</span>(<span class="macro">vec</span><span class="macro">!</span>[<span class="prelude-val">Ok</span>(<span class="number">10</span>), <span class="prelude-val">Err</span>(<span class="bool-val">false</span>)]);
|
||
<span class="kw">let</span> <span class="ident">stream2</span> <span class="op">=</span> <span class="ident">stream</span>::<span class="ident">iter</span>(<span class="macro">vec</span><span class="macro">!</span>[<span class="prelude-val">Err</span>(<span class="bool-val">true</span>), <span class="prelude-val">Ok</span>(<span class="number">20</span>)]);
|
||
|
||
<span class="kw">let</span> <span class="ident">stream</span> <span class="op">=</span> <span class="ident">stream1</span>.<span class="ident">chain</span>(<span class="ident">stream2</span>);
|
||
|
||
<span class="kw">let</span> <span class="ident">result</span>: <span class="ident">Vec</span><span class="op"><</span><span class="kw">_</span><span class="op">></span> <span class="op">=</span> <span class="ident">stream</span>.<span class="ident">collect</span>().<span class="kw">await</span>;
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">result</span>, <span class="macro">vec</span><span class="macro">!</span>[
|
||
<span class="prelude-val">Ok</span>(<span class="number">10</span>),
|
||
<span class="prelude-val">Err</span>(<span class="bool-val">false</span>),
|
||
<span class="prelude-val">Err</span>(<span class="bool-val">true</span>),
|
||
<span class="prelude-val">Ok</span>(<span class="number">20</span>),
|
||
]);</pre></div>
|
||
</div><h3 id="method.peekable" class="method"><code>pub fn <a href="#method.peekable" class="fnname">peekable</a>(self) -> <a class="struct" href="../../futures/stream/struct.Peekable.html" title="struct futures::stream::Peekable">Peekable</a><Self></code><a class="srclink" href="../../src/futures_util/stream/stream/mod.rs.html#1264-1266" title="goto source code">[src]</a></h3><div class="docblock"><p>Creates a new stream which exposes a <code>peek</code> method.</p>
|
||
<p>Calling <code>peek</code> returns a reference to the next item in the stream.</p>
|
||
</div><h3 id="method.chunks" class="method"><code>pub fn <a href="#method.chunks" class="fnname">chunks</a>(self, capacity: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -> <a class="struct" href="../../futures/stream/struct.Chunks.html" title="struct futures::stream::Chunks">Chunks</a><Self></code><a class="srclink" href="../../src/futures_util/stream/stream/mod.rs.html#1290-1292" title="goto source code">[src]</a></h3><div class="docblock"><p>An adaptor for chunking up items of the stream inside a vector.</p>
|
||
<p>This combinator will attempt to pull items from this stream and buffer
|
||
them into a local vector. At most <code>capacity</code> items will get buffered
|
||
before they're yielded from the returned stream.</p>
|
||
<p>Note that the vectors returned from this iterator may not always have
|
||
<code>capacity</code> elements. If the underlying stream ended and only a partial
|
||
vector was created, it'll be returned. Additionally if an error happens
|
||
from the underlying stream then the currently buffered items will be
|
||
yielded.</p>
|
||
<p>This method is only available when the <code>std</code> or <code>alloc</code> feature of this
|
||
library is activated, and it is activated by default.</p>
|
||
<h1 id="panics-1" class="section-header"><a href="#panics-1">Panics</a></h1>
|
||
<p>This method will panic if <code>capacity</code> is zero.</p>
|
||
</div><h3 id="method.ready_chunks" class="method"><code>pub fn <a href="#method.ready_chunks" class="fnname">ready_chunks</a>(self, capacity: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -> <a class="struct" href="../../futures/stream/struct.ReadyChunks.html" title="struct futures::stream::ReadyChunks">ReadyChunks</a><Self></code><a class="srclink" href="../../src/futures_util/stream/stream/mod.rs.html#1316-1318" title="goto source code">[src]</a></h3><div class="docblock"><p>An adaptor for chunking up ready items of the stream inside a vector.</p>
|
||
<p>This combinator will attempt to pull ready items from this stream and
|
||
buffer them into a local vector. At most <code>capacity</code> items will get
|
||
buffered before they're yielded from the returned stream. If underlying
|
||
stream returns <code>Poll::Pending</code>, and collected chunk is not empty, it will
|
||
be immediately returned.</p>
|
||
<p>If the underlying stream ended and only a partial vector was created,
|
||
it'll be returned. Additionally if an error happens from the underlying
|
||
stream then the currently buffered items will be yielded.</p>
|
||
<p>This method is only available when the <code>std</code> or <code>alloc</code> feature of this
|
||
library is activated, and it is activated by default.</p>
|
||
<h1 id="panics-2" class="section-header"><a href="#panics-2">Panics</a></h1>
|
||
<p>This method will panic if <code>capacity</code> is zero.</p>
|
||
</div><h3 id="method.forward" class="method"><code>pub fn <a href="#method.forward" class="fnname">forward</a><S>(self, sink: S) -> <a class="struct" href="../../futures/stream/struct.Forward.html" title="struct futures::stream::Forward">Forward</a><Self, S><span class="notable-traits"><span class="notable-traits-tooltip">ⓘ<div class="notable-traits-tooltiptext"><span class="docblock"><h3 class="notable">Notable traits for <a class="struct" href="../../futures/stream/struct.Forward.html" title="struct futures::stream::Forward">Forward</a><St, Si></h3><code class="content"><span class="where fmt-newline">impl<St, Si> <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a> for <a class="struct" href="../../futures/stream/struct.Forward.html" title="struct futures::stream::Forward">Forward</a><St, Si> <span class="where fmt-newline">where<br> St: <a class="trait" href="../../futures/stream/trait.TryStream.html" title="trait futures::stream::TryStream">TryStream</a>,<br> Forward<St, Si, <St as <a class="trait" href="../../futures/stream/trait.TryStream.html" title="trait futures::stream::TryStream">TryStream</a>>::<a class="type" href="../../futures/stream/trait.TryStream.html#associatedtype.Ok" title="type futures::stream::TryStream::Ok">Ok</a>>: <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a>, </span></span><span class="where fmt-newline"> type <a href="../../futures/future/trait.Future.html#associatedtype.Output" class="type">Output</a> = <Forward<St, Si, <St as <a class="trait" href="../../futures/stream/trait.TryStream.html" title="trait futures::stream::TryStream">TryStream</a>>::<a class="type" href="../../futures/stream/trait.TryStream.html#associatedtype.Ok" title="type futures::stream::TryStream::Ok">Ok</a>> as <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a>>::<a class="type" href="../../futures/future/trait.Future.html#associatedtype.Output" title="type futures::future::Future::Output">Output</a>;</span></code></span></div></span></span> <span class="where fmt-newline">where<br> Self: <a class="trait" href="../../futures/stream/trait.TryStream.html" title="trait futures::stream::TryStream">TryStream</a>,<br> S: <a class="trait" href="../../futures/sink/trait.Sink.html" title="trait futures::sink::Sink">Sink</a><Self::<a class="type" href="../../futures/stream/trait.TryStream.html#associatedtype.Ok" title="type futures::stream::TryStream::Ok">Ok</a>, Error = Self::<a class="type" href="../../futures/stream/trait.TryStream.html#associatedtype.Error" title="type futures::stream::TryStream::Error">Error</a>>, </span></code><a class="srclink" href="../../src/futures_util/stream/stream/mod.rs.html#1335-1338" title="goto source code">[src]</a></h3><div class="docblock"><p>A future that completes after the given stream has been fully processed
|
||
into the sink and the sink has been flushed and closed.</p>
|
||
<p>This future will drive the stream to keep producing items until it is
|
||
exhausted, sending each item to the sink. It will complete once the
|
||
stream is exhausted, the sink has received and flushed all items, and
|
||
the sink is closed. Note that neither the original stream nor provided
|
||
sink will be output by this future. Pass the sink by <code>Pin<&mut S></code>
|
||
(for example, via <code>forward(&mut sink)</code> inside an <code>async</code> fn/block) in
|
||
order to preserve access to the <code>Sink</code>.</p>
|
||
</div><h3 id="method.split" class="method"><code>pub fn <a href="#method.split" class="fnname">split</a><Item>(self) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">(</a><a class="struct" href="../../futures/stream/struct.SplitSink.html" title="struct futures::stream::SplitSink">SplitSink</a><Self, Item>, <a class="struct" href="../../futures/stream/struct.SplitStream.html" title="struct futures::stream::SplitStream">SplitStream</a><Self><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">)</a> <span class="where fmt-newline">where<br> Self: <a class="trait" href="../../futures/sink/trait.Sink.html" title="trait futures::sink::Sink">Sink</a><Item>, </span></code><a class="srclink" href="../../src/futures_util/stream/stream/mod.rs.html#1359-1361" title="goto source code">[src]</a></h3><div class="docblock"><p>Splits this <code>Stream + Sink</code> object into separate <code>Sink</code> and <code>Stream</code>
|
||
objects.</p>
|
||
<p>This can be useful when you want to split ownership between tasks, or
|
||
allow direct interaction between the two objects (e.g. via
|
||
<code>Sink::send_all</code>).</p>
|
||
<p>This method is only available when the <code>std</code> or <code>alloc</code> feature of this
|
||
library is activated, and it is activated by default.</p>
|
||
</div><h3 id="method.inspect" class="method"><code>pub fn <a href="#method.inspect" class="fnname">inspect</a><F>(self, f: F) -> <a class="struct" href="../../futures/stream/struct.Inspect.html" title="struct futures::stream::Inspect">Inspect</a><Self, F> <span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(&Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>), </span></code><a class="srclink" href="../../src/futures_util/stream/stream/mod.rs.html#1375-1378" title="goto source code">[src]</a></h3><div class="docblock"><p>Do something with each item of this stream, afterwards passing it on.</p>
|
||
<p>This is similar to the <code>Iterator::inspect</code> method in the standard
|
||
library where it allows easily inspecting each value as it passes
|
||
through the stream, for example to debug what's going on.</p>
|
||
</div><h3 id="method.left_stream" class="method"><code>pub fn <a href="#method.left_stream" class="fnname">left_stream</a><B>(self) -> <a class="enum" href="../../futures/future/enum.Either.html" title="enum futures::future::Either">Either</a><Self, B><span class="notable-traits"><span class="notable-traits-tooltip">ⓘ<div class="notable-traits-tooltiptext"><span class="docblock"><h3 class="notable">Notable traits for <a class="enum" href="../../futures/future/enum.Either.html" title="enum futures::future::Either">Either</a><A, B></h3><code class="content"><span class="where fmt-newline">impl<A, B> <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a> for <a class="enum" href="../../futures/future/enum.Either.html" title="enum futures::future::Either">Either</a><A, B> <span class="where fmt-newline">where<br> B: <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a><Output = <A as <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a>>::<a class="type" href="../../futures/future/trait.Future.html#associatedtype.Output" title="type futures::future::Future::Output">Output</a>>,<br> A: <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a>, </span></span><span class="where fmt-newline"> type <a href="../../futures/future/trait.Future.html#associatedtype.Output" class="type">Output</a> = <A as <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a>>::<a class="type" href="../../futures/future/trait.Future.html#associatedtype.Output" title="type futures::future::Future::Output">Output</a>;</span></code></span></div></span></span> <span class="where fmt-newline">where<br> B: <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a><Item = Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>>, </span></code><a class="srclink" href="../../src/futures_util/stream/stream/mod.rs.html#1388-1391" title="goto source code">[src]</a></h3><div class="docblock"><p>Wrap this stream in an <code>Either</code> stream, making it the left-hand variant
|
||
of that <code>Either</code>.</p>
|
||
<p>This can be used in combination with the <code>right_stream</code> method to write <code>if</code>
|
||
statements that evaluate to different streams in different branches.</p>
|
||
</div><h3 id="method.right_stream" class="method"><code>pub fn <a href="#method.right_stream" class="fnname">right_stream</a><B>(self) -> <a class="enum" href="../../futures/future/enum.Either.html" title="enum futures::future::Either">Either</a><B, Self><span class="notable-traits"><span class="notable-traits-tooltip">ⓘ<div class="notable-traits-tooltiptext"><span class="docblock"><h3 class="notable">Notable traits for <a class="enum" href="../../futures/future/enum.Either.html" title="enum futures::future::Either">Either</a><A, B></h3><code class="content"><span class="where fmt-newline">impl<A, B> <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a> for <a class="enum" href="../../futures/future/enum.Either.html" title="enum futures::future::Either">Either</a><A, B> <span class="where fmt-newline">where<br> B: <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a><Output = <A as <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a>>::<a class="type" href="../../futures/future/trait.Future.html#associatedtype.Output" title="type futures::future::Future::Output">Output</a>>,<br> A: <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a>, </span></span><span class="where fmt-newline"> type <a href="../../futures/future/trait.Future.html#associatedtype.Output" class="type">Output</a> = <A as <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a>>::<a class="type" href="../../futures/future/trait.Future.html#associatedtype.Output" title="type futures::future::Future::Output">Output</a>;</span></code></span></div></span></span> <span class="where fmt-newline">where<br> B: <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a><Item = Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>>, </span></code><a class="srclink" href="../../src/futures_util/stream/stream/mod.rs.html#1401-1404" title="goto source code">[src]</a></h3><div class="docblock"><p>Wrap this stream in an <code>Either</code> stream, making it the right-hand variant
|
||
of that <code>Either</code>.</p>
|
||
<p>This can be used in combination with the <code>left_stream</code> method to write <code>if</code>
|
||
statements that evaluate to different streams in different branches.</p>
|
||
</div><h3 id="method.poll_next_unpin" class="method"><code>pub fn <a href="#method.poll_next_unpin" class="fnname">poll_next_unpin</a>(<br> &mut self, <br> cx: &mut <a class="struct" href="../../futures/task/struct.Context.html" title="struct futures::task::Context">Context</a><'_><br>) -> <a class="enum" href="../../futures/task/enum.Poll.html" title="enum futures::task::Poll">Poll</a><<a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><Self::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>>> <span class="where fmt-newline">where<br> Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>, </span></code><a class="srclink" href="../../src/futures_util/stream/stream/mod.rs.html#1411-1413" title="goto source code">[src]</a></h3><div class="docblock"><p>A convenience method for calling <a href="../../futures/stream/trait.Stream.html#tymethod.poll_next" title="Stream::poll_next"><code>Stream::poll_next</code></a> on <a href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html" title="Unpin"><code>Unpin</code></a>
|
||
stream types.</p>
|
||
</div><h3 id="method.select_next_some" class="method"><code>pub fn <a href="#method.select_next_some" class="fnname">select_next_some</a>(&mut self) -> <a class="struct" href="../../futures/stream/struct.SelectNextSome.html" title="struct futures::stream::SelectNextSome">SelectNextSome</a><'_, Self><span class="notable-traits"><span class="notable-traits-tooltip">ⓘ<div class="notable-traits-tooltiptext"><span class="docblock"><h3 class="notable">Notable traits for <a class="struct" href="../../futures/stream/struct.SelectNextSome.html" title="struct futures::stream::SelectNextSome">SelectNextSome</a><'_, St></h3><code class="content"><span class="where fmt-newline">impl<'_, St> <a class="trait" href="../../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a> for <a class="struct" href="../../futures/stream/struct.SelectNextSome.html" title="struct futures::stream::SelectNextSome">SelectNextSome</a><'_, St> <span class="where fmt-newline">where<br> St: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a> + <a class="trait" href="../../futures/stream/trait.FusedStream.html" title="trait futures::stream::FusedStream">FusedStream</a> + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>, </span></span><span class="where fmt-newline"> type <a href="../../futures/future/trait.Future.html#associatedtype.Output" class="type">Output</a> = <St as <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a>>::<a class="type" href="../../futures/stream/trait.Stream.html#associatedtype.Item" title="type futures::stream::Stream::Item">Item</a>;</span></code></span></div></span></span> <span class="where fmt-newline">where<br> Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a> + <a class="trait" href="../../futures/stream/trait.FusedStream.html" title="trait futures::stream::FusedStream">FusedStream</a>, </span></code><a class="srclink" href="../../src/futures_util/stream/stream/mod.rs.html#1466-1468" title="goto source code">[src]</a></h3><div class="docblock"><p>Returns a <a href="../../futures/future/trait.Future.html" title="Future"><code>Future</code></a> that resolves when the next item in this stream is
|
||
ready.</p>
|
||
<p>This is similar to the <a href="../../futures/stream/trait.StreamExt.html#method.next" title="StreamExt::next"><code>next</code></a> method, but it won't
|
||
resolve to <a href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html#variant.None" title="None"><code>None</code></a> if used on an empty <a href="../../futures/stream/trait.Stream.html" title="Stream"><code>Stream</code></a>. Instead, the
|
||
returned future type will return <code>true</code> from
|
||
<a href="../../futures/future/trait.FusedFuture.html#tymethod.is_terminated"><code>FusedFuture::is_terminated</code></a> when the <a href="../../futures/stream/trait.Stream.html" title="Stream"><code>Stream</code></a> is empty, allowing
|
||
<a href="../../futures/stream/trait.StreamExt.html#method.select_next_some" title="StreamExt::select_next_some"><code>select_next_some</code></a> to be easily used with
|
||
the <a href="../../futures/macro.select.html" title="select!"><code>select!</code></a> macro.</p>
|
||
<p>If the future is polled after this <a href="../../futures/stream/trait.Stream.html" title="Stream"><code>Stream</code></a> is empty it will panic.
|
||
Using the future with a <a href="../../futures/future/trait.FusedFuture.html"><code>FusedFuture</code></a>-aware primitive like the
|
||
<a href="../../futures/macro.select.html" title="select!"><code>select!</code></a> macro will prevent this.</p>
|
||
<h1 id="examples-27" class="section-header"><a href="#examples-27">Examples</a></h1>
|
||
<div class="example-wrap"><pre class="rust rust-example-rendered">
|
||
<span class="kw">use</span> <span class="ident">futures</span>::{<span class="ident">future</span>, <span class="ident">select</span>};
|
||
<span class="kw">use</span> <span class="ident">futures</span>::<span class="ident">stream</span>::{<span class="ident">StreamExt</span>, <span class="ident">FuturesUnordered</span>};
|
||
|
||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">fut</span> <span class="op">=</span> <span class="ident">future</span>::<span class="ident">ready</span>(<span class="number">1</span>);
|
||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">async_tasks</span> <span class="op">=</span> <span class="ident">FuturesUnordered</span>::<span class="ident">new</span>();
|
||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">total</span> <span class="op">=</span> <span class="number">0</span>;
|
||
<span class="kw">loop</span> {
|
||
<span class="macro">select</span><span class="macro">!</span> {
|
||
<span class="ident">num</span> <span class="op">=</span> <span class="ident">fut</span> <span class="op">=</span><span class="op">></span> {
|
||
<span class="comment">// First, the `ready` future completes.</span>
|
||
<span class="ident">total</span> <span class="op">+</span><span class="op">=</span> <span class="ident">num</span>;
|
||
<span class="comment">// Then we spawn a new task onto `async_tasks`,</span>
|
||
<span class="ident">async_tasks</span>.<span class="ident">push</span>(<span class="kw">async</span> { <span class="number">5</span> });
|
||
},
|
||
<span class="comment">// On the next iteration of the loop, the task we spawned</span>
|
||
<span class="comment">// completes.</span>
|
||
<span class="ident">num</span> <span class="op">=</span> <span class="ident">async_tasks</span>.<span class="ident">select_next_some</span>() <span class="op">=</span><span class="op">></span> {
|
||
<span class="ident">total</span> <span class="op">+</span><span class="op">=</span> <span class="ident">num</span>;
|
||
}
|
||
<span class="comment">// Finally, both the `ready` future and `async_tasks` have</span>
|
||
<span class="comment">// finished, so we enter the `complete` branch.</span>
|
||
<span class="ident">complete</span> <span class="op">=</span><span class="op">></span> <span class="kw">break</span>,
|
||
}
|
||
}
|
||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">total</span>, <span class="number">6</span>);</pre></div>
|
||
</div></div><span class="loading-content">Loading content...</span><h2 id="implementors" class="small-section-header">Implementors<a href="#implementors" class="anchor"></a></h2><div class="item-list" id="implementors-list"><h3 id="impl-StreamExt" class="impl"><code class="in-band">impl<T> StreamExt for T <span class="where fmt-newline">where<br> T: <a class="trait" href="../../futures/stream/trait.Stream.html" title="trait futures::stream::Stream">Stream</a> + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>, </span></code><a href="#impl-StreamExt" class="anchor"></a><a class="srclink" href="../../src/futures_util/stream/stream/mod.rs.html#208" title="goto source code">[src]</a></h3><div class="impl-items"></div></div><span class="loading-content">Loading content...</span><script type="text/javascript" src="../../implementors/futures_util/stream/stream/trait.StreamExt.js" async></script></section><section id="search" class="content hidden"></section><section class="footer"></section><div id="rustdoc-vars" data-root-path="../../" data-current-crate="futures"></div>
|
||
<script src="../../main.js"></script><script defer src="../../search-index.js"></script></body></html> |