merge_streams/merge/
mod.rs

1use futures_core::Stream;
2
3pub(crate) mod array;
4pub(crate) mod tuple;
5pub(crate) mod vec;
6
7/// Combines multiple streams into a single stream of all their outputs.
8///
9/// Items are yielded as soon as they're received, and the stream continues
10/// yield until both streams have been exhausted. The output ordering
11/// between streams is not guaranteed.
12///
13/// # Examples
14///
15/// ```
16/// use merge_streams::MergeStreams;
17/// use futures_lite::prelude::*;
18/// use futures_lite::{future::block_on, stream};
19///
20/// fn main() {
21///     block_on(async {
22///         let a = stream::once(1);
23///         let b = stream::once(2);
24///         let c = stream::once(3);
25///         let mut s = [a, b, c].merge();
26///
27///         let mut buf = vec![];
28///         s.for_each(|n| buf.push(n)).await;
29///         buf.sort_unstable();
30///         assert_eq!(&buf, &[1, 2, 3]);
31///     })
32/// }
33/// ```
34pub trait MergeStreams {
35    /// The resulting output type.
36    type Item;
37
38    /// The stream type.
39    type Stream: Stream<Item = Self::Item>;
40
41    /// Combine multiple streams into a single stream.
42    fn merge(self) -> Self::Stream;
43}