use futures::{Future, FutureExt, Stream, StreamExt, future::OptionFuture}; use super::super::IterStream; pub trait OptionStream { fn stream(self) -> impl Stream + Send; } impl OptionStream for OptionFuture where Fut: Future + Send, S: Stream + Send, O: IntoIterator + Send, ::IntoIter: Send, T: Send, { #[inline] fn stream(self) -> impl Stream + Send { self.map(|opt| opt.map(|(curr, next)| curr.into_iter().stream().chain(next))) .map(Option::into_iter) .map(IterStream::stream) .flatten_stream() .flatten() } }