use crate::shared_stream::SharedStream;
use futures_util::stream::Stream;
pub trait SharedStreamExt: Stream {
fn into_shared(self) -> SharedStream<Self>
where
Self: Sized + Unpin,
Self::Item: Clone,
{
SharedStream::new(self)
}
}
impl<S> SharedStreamExt for S where S: Stream {}
#[cfg(test)]
mod tests {
use super::*;
use futures_util::stream;
use futures_util::StreamExt as FuturesStreamExt;
#[tokio::test]
async fn test_into_shared_trait_works() {
let data = vec![1, 2, 3];
let stream = stream::iter(data.clone());
let shared_stream: SharedStream<_> = stream.into_shared();
let result: Vec<i32> = shared_stream.collect().await;
assert_eq!(result, data);
}
}