pub struct StreamGroup<S> { /* private fields */ }
Expand description
A growable group of streams which act as a single unit.
§Example
Basic example
use futures_concurrency::stream::StreamGroup;
use futures_lite::{stream, StreamExt};
let mut group = StreamGroup::new();
group.insert(stream::once(2));
group.insert(stream::once(4));
let mut out = 0;
while let Some(num) = group.next().await {
out += num;
}
assert_eq!(out, 6);
Update the group on every iteration
use futures_concurrency::stream::StreamGroup;
use lending_stream::prelude::*;
use futures_lite::stream;
let mut group = StreamGroup::new();
group.insert(stream::once(4));
let mut index = 3;
let mut out = 0;
let mut group = group.lend_mut();
while let Some((group, num)) = group.next().await {
if index != 0 {
group.insert(stream::once(index));
index -= 1;
}
out += num;
}
assert_eq!(out, 10);
Implementations§
source§impl<S> StreamGroup<S>
impl<S> StreamGroup<S>
sourcepub fn new() -> Self
pub fn new() -> Self
Create a new instance of StreamGroup
.
§Example
use futures_concurrency::stream::StreamGroup;
let group = StreamGroup::new();
sourcepub fn with_capacity(capacity: usize) -> Self
pub fn with_capacity(capacity: usize) -> Self
Create a new instance of StreamGroup
with a given capacity.
§Example
use futures_concurrency::stream::StreamGroup;
let group = StreamGroup::with_capacity(2);
sourcepub fn len(&self) -> usize
pub fn len(&self) -> usize
Return the number of futures currently active in the group.
§Example
use futures_concurrency::stream::StreamGroup;
use futures_lite::stream;
let mut group = StreamGroup::with_capacity(2);
assert_eq!(group.len(), 0);
group.insert(stream::once(12));
assert_eq!(group.len(), 1);
sourcepub fn capacity(&self) -> usize
pub fn capacity(&self) -> usize
Return the capacity of the StreamGroup
.
§Example
use futures_concurrency::stream::StreamGroup;
use futures_lite::stream;
let group = StreamGroup::with_capacity(2);
assert_eq!(group.capacity(), 2);
sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Returns true if there are no futures currently active in the group.
§Example
use futures_concurrency::stream::StreamGroup;
use futures_lite::stream;
let mut group = StreamGroup::with_capacity(2);
assert!(group.is_empty());
group.insert(stream::once(12));
assert!(!group.is_empty());
sourcepub fn remove(&mut self, key: Key) -> bool
pub fn remove(&mut self, key: Key) -> bool
Removes a stream from the group. Returns whether the value was present in the group.
§Example
use futures_lite::stream;
use futures_concurrency::stream::StreamGroup;
let mut group = StreamGroup::new();
let key = group.insert(stream::once(4));
assert_eq!(group.len(), 1);
group.remove(key);
assert_eq!(group.len(), 0);
sourcepub fn contains_key(&mut self, key: Key) -> bool
pub fn contains_key(&mut self, key: Key) -> bool
Returns true
if the StreamGroup
contains a value for the specified key.
§Example
use futures_lite::stream;
use futures_concurrency::stream::StreamGroup;
let mut group = StreamGroup::new();
let key = group.insert(stream::once(4));
assert!(group.contains_key(key));
group.remove(key);
assert!(!group.contains_key(key));
sourcepub fn reserve(&mut self, additional: usize)
pub fn reserve(&mut self, additional: usize)
Reserves capacity for additional
more streams to be inserted.
Does nothing if the capacity is already sufficient.
§Example
use futures_concurrency::stream::StreamGroup;
use futures_lite::stream::Once;
let mut group: StreamGroup<Once<usize>> = StreamGroup::with_capacity(0);
assert_eq!(group.capacity(), 0);
group.reserve(10);
assert_eq!(group.capacity(), 10);
// does nothing if capacity is sufficient
group.reserve(5);
assert_eq!(group.capacity(), 10);
source§impl<S: Stream> StreamGroup<S>
impl<S: Stream> StreamGroup<S>
sourcepub fn insert(&mut self, stream: S) -> Keywhere
S: Stream,
pub fn insert(&mut self, stream: S) -> Keywhere
S: Stream,
Insert a new future into the group.
§Example
use futures_concurrency::stream::StreamGroup;
use futures_lite::stream;
let mut group = StreamGroup::with_capacity(2);
group.insert(stream::once(12));
sourcepub fn keyed(self) -> Keyed<S>
pub fn keyed(self) -> Keyed<S>
Create a stream which also yields the key of each item.
§Example
use futures_concurrency::stream::StreamGroup;
use futures_lite::{stream, StreamExt};
let mut group = StreamGroup::new();
group.insert(stream::once(2));
group.insert(stream::once(4));
let mut out = 0;
let mut group = group.keyed();
while let Some((_key, num)) = group.next().await {
out += num;
}
assert_eq!(out, 6);
Trait Implementations§
source§impl<T: Debug> Debug for StreamGroup<T>
impl<T: Debug> Debug for StreamGroup<T>
source§impl<S: Default> Default for StreamGroup<S>
impl<S: Default> Default for StreamGroup<S>
source§fn default() -> StreamGroup<S>
fn default() -> StreamGroup<S>
Returns the “default value” for a type. Read more
source§impl<S: Stream> FromIterator<S> for StreamGroup<S>
impl<S: Stream> FromIterator<S> for StreamGroup<S>
source§fn from_iter<T: IntoIterator<Item = S>>(iter: T) -> Self
fn from_iter<T: IntoIterator<Item = S>>(iter: T) -> Self
Creates a value from an iterator. Read more
source§impl<S: Stream> Stream for StreamGroup<S>
impl<S: Stream> Stream for StreamGroup<S>
impl<'pin, S> Unpin for StreamGroup<S>where
__StreamGroup<'pin, S>: Unpin,
Auto Trait Implementations§
impl<S> Freeze for StreamGroup<S>
impl<S> RefUnwindSafe for StreamGroup<S>where
S: RefUnwindSafe,
impl<S> Send for StreamGroup<S>where
S: Send,
impl<S> Sync for StreamGroup<S>where
S: Sync,
impl<S> UnwindSafe for StreamGroup<S>where
S: UnwindSafe,
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
source§impl<T> BufferedStreamExt for T
impl<T> BufferedStreamExt for T
source§fn buffered_ordered(self, n: usize) -> BufferedOrdered<Self>
fn buffered_ordered(self, n: usize) -> BufferedOrdered<Self>
An adaptor for creating a buffered list of pending futures. Read more
source§fn buffered_unordered(self, n: usize) -> BufferUnordered<Self>
fn buffered_unordered(self, n: usize) -> BufferUnordered<Self>
An adaptor for creating a buffered list of pending futures (unordered). Read more
source§fn for_each_concurrent<Fut, F>(
self,
limit: usize,
f: F,
) -> ForEachConcurrent<Self, Fut, F>
fn for_each_concurrent<Fut, F>( self, limit: usize, f: F, ) -> ForEachConcurrent<Self, Fut, F>
Runs this stream to completion, executing the provided asynchronous
closure for each element on the stream concurrently as elements become
available. Read more
source§impl<T> BufferedTryStreamExt for T
impl<T> BufferedTryStreamExt for T
source§fn try_buffered_ordered(self, n: usize) -> TryBufferedOrdered<Self>
fn try_buffered_ordered(self, n: usize) -> TryBufferedOrdered<Self>
An adaptor for creating a buffered list of pending futures. Read more
source§fn try_buffered_unordered(self, n: usize) -> TryBufferUnordered<Self>
fn try_buffered_unordered(self, n: usize) -> TryBufferUnordered<Self>
An adaptor for creating a buffered list of pending futures (unordered). Read more
source§impl<S> IntoStream for Swhere
S: Stream,
impl<S> IntoStream for Swhere
S: Stream,
source§impl<S> StreamExt for S
impl<S> StreamExt for S
source§fn next(&mut self) -> NextFuture<'_, Self>where
Self: Unpin,
fn next(&mut self) -> NextFuture<'_, Self>where
Self: Unpin,
Retrieves the next item in the stream. Read more
source§fn try_next<T, E>(&mut self) -> TryNextFuture<'_, Self>
fn try_next<T, E>(&mut self) -> TryNextFuture<'_, Self>
Retrieves the next item in the stream. Read more
source§fn count(self) -> CountFuture<Self>where
Self: Sized,
fn count(self) -> CountFuture<Self>where
Self: Sized,
Counts the number of items in the stream. Read more
source§fn map<T, F>(self, f: F) -> Map<Self, F>
fn map<T, F>(self, f: F) -> Map<Self, F>
Maps items of the stream to new values using a closure. Read more
source§fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>
fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>
Maps items to streams and then concatenates them. Read more
source§fn then<F, Fut>(self, f: F) -> Then<Self, F, Fut>
fn then<F, Fut>(self, f: F) -> Then<Self, F, Fut>
Maps items of the stream to new values using an async closure. Read more
source§fn filter_map<T, F>(self, f: F) -> FilterMap<Self, F>
fn filter_map<T, F>(self, f: F) -> FilterMap<Self, F>
Filters and maps items of the stream using a closure. Read more
source§fn take(self, n: usize) -> Take<Self>where
Self: Sized,
fn take(self, n: usize) -> Take<Self>where
Self: Sized,
Takes only the first
n
items of the stream. Read moresource§fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>
fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>
source§fn skip(self, n: usize) -> Skip<Self>where
Self: Sized,
fn skip(self, n: usize) -> Skip<Self>where
Self: Sized,
Skips the first
n
items of the stream. Read moresource§fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>
fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>
source§fn step_by(self, step: usize) -> StepBy<Self>where
Self: Sized,
fn step_by(self, step: usize) -> StepBy<Self>where
Self: Sized,
Yields every
step
th item. Read moresource§fn chain<U>(self, other: U) -> Chain<Self, U>
fn chain<U>(self, other: U) -> Chain<Self, U>
Appends another stream to the end of this one. Read more
source§fn collect<C>(self) -> CollectFuture<Self, C>
fn collect<C>(self) -> CollectFuture<Self, C>
Collects all items in the stream into a collection. Read more
source§fn try_collect<T, E, C>(self) -> TryCollectFuture<Self, C>
fn try_collect<T, E, C>(self) -> TryCollectFuture<Self, C>
Collects all items in the fallible stream into a collection. Read more
source§fn partition<B, P>(self, predicate: P) -> PartitionFuture<Self, P, B>
fn partition<B, P>(self, predicate: P) -> PartitionFuture<Self, P, B>
Partitions items into those for which
predicate
is true
and those for which it is
false
, and then collects them into two collections. Read moresource§fn fold<T, F>(self, init: T, f: F) -> FoldFuture<Self, F, T>
fn fold<T, F>(self, init: T, f: F) -> FoldFuture<Self, F, T>
Accumulates a computation over the stream. Read more
source§fn try_fold<T, E, F, B>(
&mut self,
init: B,
f: F,
) -> TryFoldFuture<'_, Self, F, B>
fn try_fold<T, E, F, B>( &mut self, init: B, f: F, ) -> TryFoldFuture<'_, Self, F, B>
Accumulates a fallible computation over the stream. Read more
source§fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Self, St, F>
fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Self, St, F>
Maps items of the stream to new values using a state value and a closure. Read more
source§fn enumerate(self) -> Enumerate<Self>where
Self: Sized,
fn enumerate(self) -> Enumerate<Self>where
Self: Sized,
Enumerates items, mapping them to
(index, item)
. Read moresource§fn inspect<F>(self, f: F) -> Inspect<Self, F>
fn inspect<F>(self, f: F) -> Inspect<Self, F>
Calls a closure on each item and passes it on. Read more
source§fn nth(&mut self, n: usize) -> NthFuture<'_, Self>where
Self: Unpin,
fn nth(&mut self, n: usize) -> NthFuture<'_, Self>where
Self: Unpin,
Gets the
n
th item of the stream. Read moresource§fn last(self) -> LastFuture<Self>where
Self: Sized,
fn last(self) -> LastFuture<Self>where
Self: Sized,
Returns the last item in the stream. Read more
source§fn find<P>(&mut self, predicate: P) -> FindFuture<'_, Self, P>
fn find<P>(&mut self, predicate: P) -> FindFuture<'_, Self, P>
source§fn find_map<F, B>(&mut self, f: F) -> FindMapFuture<'_, Self, F>
fn find_map<F, B>(&mut self, f: F) -> FindMapFuture<'_, Self, F>
source§fn position<P>(&mut self, predicate: P) -> PositionFuture<'_, Self, P>
fn position<P>(&mut self, predicate: P) -> PositionFuture<'_, Self, P>
source§fn for_each<F>(self, f: F) -> ForEachFuture<Self, F>
fn for_each<F>(self, f: F) -> ForEachFuture<Self, F>
Calls a closure on each item of the stream. Read more
source§fn try_for_each<F, E>(&mut self, f: F) -> TryForEachFuture<'_, Self, F>
fn try_for_each<F, E>(&mut self, f: F) -> TryForEachFuture<'_, Self, F>
Calls a fallible closure on each item of the stream, stopping on first error. Read more
source§fn zip<U>(self, other: U) -> Zip<Self, U>
fn zip<U>(self, other: U) -> Zip<Self, U>
Zips up two streams into a single stream of pairs. Read more
source§fn unzip<A, B, FromA, FromB>(self) -> UnzipFuture<Self, FromA, FromB>
fn unzip<A, B, FromA, FromB>(self) -> UnzipFuture<Self, FromA, FromB>
Collects a stream of pairs into a pair of collections. Read more
source§fn race<S>(self, other: S) -> Race<Self, S>
fn race<S>(self, other: S) -> Race<Self, S>
Merges with
other
stream, with no preference for either stream when both are ready. Read moresource§impl<S1> StreamExt for S1where
S1: Stream,
impl<S1> StreamExt for S1where
S1: Stream,
source§fn merge<T, S2>(
self,
other: S2,
) -> Merge2<T, S1, <S2 as IntoStream>::IntoStream>where
S1: Stream<Item = T>,
S2: IntoStream<Item = T>,
fn merge<T, S2>(
self,
other: S2,
) -> Merge2<T, S1, <S2 as IntoStream>::IntoStream>where
S1: Stream<Item = T>,
S2: IntoStream<Item = T>,
Combines two streams into a single stream of all their outputs.
source§fn chain<T, S2>(self, other: S2) -> Chain2<S1, <S2 as IntoStream>::IntoStream>where
S1: Stream<Item = T>,
S2: IntoStream<Item = T>,
fn chain<T, S2>(self, other: S2) -> Chain2<S1, <S2 as IntoStream>::IntoStream>where
S1: Stream<Item = T>,
S2: IntoStream<Item = T>,
Takes two streams and creates a new stream over all in sequence
source§fn zip<T, S2>(self, other: S2) -> Zip2<S1, <S2 as IntoStream>::IntoStream>where
S1: Stream<Item = T>,
S2: IntoStream<Item = T>,
fn zip<T, S2>(self, other: S2) -> Zip2<S1, <S2 as IntoStream>::IntoStream>where
S1: Stream<Item = T>,
S2: IntoStream<Item = T>,
‘Zips up’ multiple streams into a single stream of pairs.
source§fn co(self) -> FromStream<Self>where
Self: Sized,
fn co(self) -> FromStream<Self>where
Self: Sized,
Convert into a concurrent stream.
source§fn wait_until<D>(self, deadline: D) -> WaitUntil<Self, D::IntoFuture>where
Self: Sized,
D: IntoFuture,
fn wait_until<D>(self, deadline: D) -> WaitUntil<Self, D::IntoFuture>where
Self: Sized,
D: IntoFuture,
Delay the yielding of items from the stream until the given deadline. Read more