MergeStreams

Trait MergeStreams 

Source
pub trait MergeStreams {
    type Item;
    type Stream: Stream<Item = Self::Item>;

    // Required method
    fn merge(self) -> Self::Stream;
}
Expand description

Combines multiple streams into a single stream of all their outputs.

Items are yielded as soon as they’re received, and the stream continues yield until both streams have been exhausted. The output ordering between streams is not guaranteed.

§Examples

use merge_streams::MergeStreams;
use futures_lite::prelude::*;
use futures_lite::{future::block_on, stream};

fn main() {
    block_on(async {
        let a = stream::once(1);
        let b = stream::once(2);
        let c = stream::once(3);
        let mut s = [a, b, c].merge();

        let mut buf = vec![];
        s.for_each(|n| buf.push(n)).await;
        buf.sort_unstable();
        assert_eq!(&buf, &[1, 2, 3]);
    })
}

Required Associated Types§

Source

type Item

The resulting output type.

Source

type Stream: Stream<Item = Self::Item>

The stream type.

Required Methods§

Source

fn merge(self) -> Self::Stream

Combine multiple streams into a single stream.

Implementations on Foreign Types§

Source§

impl<S> MergeStreams for Vec<S>
where S: IntoStream,

Source§

type Item = <Merge<<S as IntoStream>::IntoStream> as Stream>::Item

Source§

type Stream = Merge<<S as IntoStream>::IntoStream>

Source§

fn merge(self) -> Self::Stream

Source§

impl<S, const N: usize> MergeStreams for [S; N]
where S: IntoStream,

Source§

type Item = <Merge<<S as IntoStream>::IntoStream, N> as Stream>::Item

Source§

type Stream = Merge<<S as IntoStream>::IntoStream, N>

Source§

fn merge(self) -> Self::Stream

Source§

impl<T, S0, S1> MergeStreams for (S0, S1)
where S0: IntoStream<Item = T>, S1: IntoStream<Item = T>,

Source§

type Item = T

Source§

type Stream = Merge2<T, <S0 as IntoStream>::IntoStream, <S1 as IntoStream>::IntoStream>

Source§

fn merge(self) -> Self::Stream

Source§

impl<T, S0, S1, S2> MergeStreams for (S0, S1, S2)
where S0: IntoStream<Item = T>, S1: IntoStream<Item = T>, S2: IntoStream<Item = T>,

Source§

type Item = T

Source§

type Stream = Merge3<T, <S0 as IntoStream>::IntoStream, <S1 as IntoStream>::IntoStream, <S2 as IntoStream>::IntoStream>

Source§

fn merge(self) -> Self::Stream

Source§

impl<T, S0, S1, S2, S3> MergeStreams for (S0, S1, S2, S3)
where S0: IntoStream<Item = T>, S1: IntoStream<Item = T>, S2: IntoStream<Item = T>, S3: IntoStream<Item = T>,

Source§

type Item = T

Source§

type Stream = Merge4<T, <S0 as IntoStream>::IntoStream, <S1 as IntoStream>::IntoStream, <S2 as IntoStream>::IntoStream, <S3 as IntoStream>::IntoStream>

Source§

fn merge(self) -> Self::Stream

Implementors§