use futures_core::stream::Stream;
use futures_util::stream::{iter, Iter};
pub trait IntoStream {
type Item;
type IntoStream: Stream<Item = Self::Item>;
fn into_stream(self) -> Self::IntoStream;
}
impl<T> IntoStream for T where T: IntoIterator {
type Item = T::Item;
type IntoStream = Iter<T::IntoIter>;
fn into_stream(self) -> Self::IntoStream {
iter(self)
}
}
#[cfg(test)]
mod tests {
use super::IntoStream;
use futures_util::stream::StreamExt as _;
#[tokio::test]
async fn into_stream_vec() {
let v = vec![1, 2, 3];
let mut stream = v.into_stream();
assert_eq!(Some(1), stream.next().await);
assert_eq!(Some(2), stream.next().await);
assert_eq!(Some(3), stream.next().await);
assert_eq!(None, stream.next().await);
}
#[tokio::test]
async fn into_stream_slice() {
let v = vec![1, 2, 3];
let slice = &v[..];
let mut stream = slice.into_stream();
assert_eq!(Some(&1), stream.next().await);
assert_eq!(Some(&2), stream.next().await);
assert_eq!(Some(&3), stream.next().await);
assert_eq!(None, stream.next().await);
}
}