futures_buffered

Struct MergeUnbounded

source
pub struct MergeUnbounded<S> { /* private fields */ }
Expand description

A combined stream that releases values in any order that they come.

This differs from crate::Merge in that MergeUnbounded does not have a fixed capacity but instead grows on demand. It uses crate::FuturesUnordered under the hood.

§Example

use std::future::ready;
use futures::stream::{self, StreamExt};
use futures::executor::block_on;
use futures_buffered::MergeUnbounded;

block_on(async {
    let a = stream::once(ready(2));
    let b = stream::once(ready(3));
    let mut s = MergeUnbounded::from_iter([a, b]);

    let mut counter = 0;
    while let Some(n) = s.next().await {
        if n == 3 {
            s.push(stream::once(ready(4)));
        }
        counter += n;
    }
    assert_eq!(counter, 2+3+4);
})

Implementations§

source§

impl<S> MergeUnbounded<S>

source

pub const fn new() -> Self

Create a new, empty MergeUnbounded.

Calling poll_next will return Poll::Ready(None) until a stream is added with Self::push.

source

pub fn push(&mut self, stream: S)

Push a stream into the set.

This method adds the given stream to the set. This method will not call poll_next on the submitted stream. The caller must ensure that MergeUnbounded::poll_next is called in order to receive wake-up notifications for the given stream.

source

pub fn is_empty(&self) -> bool

Returns true if there are no streams in the set.

source

pub fn len(&self) -> usize

Returns the number of streams currently in the set.

Trait Implementations§

source§

impl<S> Default for MergeUnbounded<S>

source§

fn default() -> Self

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

impl<S: Stream + Unpin> FromIterator<S> for MergeUnbounded<S>

source§

fn from_iter<T>(iter: T) -> Self
where T: IntoIterator<Item = S>,

Creates a value from an iterator. Read more
source§

impl<S: Stream + Unpin> Stream for MergeUnbounded<S>

source§

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

Auto Trait Implementations§

§

impl<S> Freeze for MergeUnbounded<S>

§

impl<S> !RefUnwindSafe for MergeUnbounded<S>

§

impl<S> Send for MergeUnbounded<S>
where S: Send,

§

impl<S> Sync for MergeUnbounded<S>
where S: Sync,

§

impl<S> Unpin for MergeUnbounded<S>

§

impl<S> !UnwindSafe for MergeUnbounded<S>

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> BufferedStreamExt for T
where T: Stream + ?Sized,

source§

fn buffered_ordered(self, n: usize) -> BufferedOrdered<Self>
where Self::Item: Future, Self: Sized,

An adaptor for creating a buffered list of pending futures. Read more
source§

fn buffered_unordered(self, n: usize) -> BufferUnordered<Self>
where Self::Item: Future, Self: Sized,

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>
where F: FnMut(Self::Item) -> Fut, Fut: Future<Output = ()>, Self: Sized,

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
where T: TryStream + ?Sized,

source§

fn try_buffered_ordered(self, n: usize) -> TryBufferedOrdered<Self>
where Self::Ok: TryFuture<Err = Self::Err>, Self: Sized,

An adaptor for creating a buffered list of pending futures. Read more
source§

fn try_buffered_unordered(self, n: usize) -> TryBufferUnordered<Self>
where Self::Ok: TryFuture<Err = Self::Err>, Self: Sized,

An adaptor for creating a buffered list of pending futures (unordered). 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<T, U> TryFrom<U> for T
where U: Into<T>,

source§

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

source§

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<T, E, S> TryStream for S
where S: Stream<Item = Result<T, E>> + ?Sized,

source§

type Ok = T

source§

type Err = E

source§

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

source§

type Ok = T

The type of successful values yielded by this future
source§

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