Skip to content

Commit 9876a21

Browse files
committed
add streamext
1 parent 7d6bdc1 commit 9876a21

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

src/stream/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,11 @@
5050
pub use chain::Chain;
5151
pub use into_stream::IntoStream;
5252
pub use merge::Merge;
53+
pub use stream_ext::StreamExt;
5354
pub use zip::Zip;
5455

5556
pub(crate) mod chain;
5657
mod into_stream;
5758
pub(crate) mod merge;
59+
mod stream_ext;
5860
pub(crate) mod zip;

src/stream/stream_ext.rs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
use crate::stream::{IntoStream, Merge};
2+
use futures_core::Stream;
3+
4+
use super::merge::tuple::Merge2;
5+
6+
/// An extension trait for the `Stream` trait.
7+
pub trait StreamExt: Stream {
8+
/// Combines two streams into a single stream of all their outputs.
9+
fn merge<T, S2>(self, other: S2) -> Merge2<T, Self, S2::IntoStream>
10+
where
11+
Self: Stream<Item = T> + Sized,
12+
S2: IntoStream<Item = T>;
13+
}
14+
15+
impl<S1> StreamExt for S1
16+
where
17+
S1: Stream,
18+
{
19+
fn merge<T, S2>(self, other: S2) -> Merge2<T, S1, S2::IntoStream>
20+
where
21+
S1: Stream<Item = T>,
22+
S2: IntoStream<Item = T>,
23+
{
24+
Merge::merge((self, other))
25+
}
26+
}

0 commit comments

Comments
 (0)