#[doc(hidden)]
pub struct IntoStreamWrap<'a, T>(pub &'a T);
#[doc(hidden)]
pub trait IntoStream<T> {
type Output;
fn converter(self) -> fn(T) -> Self::Output;
}
impl<T: IntoIterator> IntoStream<T> for &IntoStreamWrap<'_, T> {
type Output = futures_util::stream::Iter<T::IntoIter>;
fn converter(self) -> fn(T) -> Self::Output {
|iter| futures_util::stream::iter(iter)
}
}
impl<T: futures_util::Stream> IntoStream<T> for &&IntoStreamWrap<'_, T> {
type Output = T;
fn converter(self) -> fn(T) -> Self::Output {
|stream| stream
}
}
#[doc(hidden)]
#[macro_export]
macro_rules! into_stream {
($e:expr) => {
match $e {
value => {
use $crate::IntoStream as _;
(&&$crate::IntoStreamWrap(&value)).converter()(value)
}
}
};
}