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>

source

pub fn new() -> Self

Create a new instance of StreamGroup.

§Example
use futures_concurrency::stream::StreamGroup;

let group = StreamGroup::new();
source

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);
source

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);
source

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);
source

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());
source

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);
source

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));
source§

impl<S: Stream> StreamGroup<S>

source

pub fn insert(&mut self, stream: S) -> Key
where 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));
source

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>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<S: Default> Default for StreamGroup<S>

source§

fn default() -> StreamGroup<S>

Returns the “default value” for a type. Read more
source§

impl<S: Stream> FromIterator<S> for StreamGroup<S>

source§

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>

§

type Item = <S as Stream>::Item

Values yielded by the stream.
source§

fn poll_next( self: Pin<&mut Self>, cx: &mut Context<'_> ) -> Poll<Option<Self::Item>>

Attempt to pull out the next value of this stream, registering the current task for wakeup if the value is not yet available, and returning None if the stream is exhausted. Read more
source§

fn size_hint(&self) -> (usize, Option<usize>)

Returns the bounds on the remaining length of the stream. Read more
source§

impl<'pin, S> Unpin for StreamGroup<S>
where __StreamGroup<'pin, S>: Unpin,

Auto Trait Implementations§

§

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> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> Conv for T

source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
source§

impl<T> FmtForward for T

source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<S> IntoStream for S
where S: Stream,

§

type Item = <S as Stream>::Item

The type of the elements being iterated over.
§

type IntoStream = S

Which kind of stream are we turning this into?
source§

fn into_stream(self) -> S

Creates a stream from a value.
source§

impl<T> Pipe for T
where T: ?Sized,

source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
source§

impl<S1> StreamExt for S1
where 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>,

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>,

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>,

‘Zips up’ multiple streams into a single stream of pairs.
source§

impl<T> Tap for T

source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
source§

impl<T> TryConv for T

source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<S, T, E> TryStream for S
where S: Stream<Item = Result<T, E>> + ?Sized,

§

type Ok = T

The type of successful values yielded by this future
§

type Error = E

The type of failures yielded by this future
source§

fn try_poll_next( self: Pin<&mut S>, cx: &mut Context<'_> ) -> Poll<Option<Result<<S as TryStream>::Ok, <S as TryStream>::Error>>>

Poll this TryStream as if it were a Stream. Read more