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}