tuwunel_core/utils/stream/
iter_stream.rs1use futures::{
2 StreamExt, stream,
3 stream::{Stream, TryStream},
4};
5
6use crate::{Error, Result};
7
8pub trait IterStream<I: IntoIterator + Send> {
13 fn stream(self) -> impl Stream<Item = <I as IntoIterator>::Item> + Send;
18
19 fn try_stream(
24 self,
25 ) -> impl TryStream<
26 Ok = <I as IntoIterator>::Item,
27 Error = Error,
28 Item = Result<<I as IntoIterator>::Item, Error>,
29 > + Send;
30}
31
32impl<I> IterStream<I> for I
33where
34 I: IntoIterator + Send,
35 <I as IntoIterator>::IntoIter: Send,
36{
37 #[inline]
38 fn stream(self) -> impl Stream<Item = <I as IntoIterator>::Item> + Send { stream::iter(self) }
39
40 #[inline]
41 fn try_stream(
42 self,
43 ) -> impl TryStream<
44 Ok = <I as IntoIterator>::Item,
45 Error = Error,
46 Item = Result<<I as IntoIterator>::Item, Error>,
47 > + Send {
48 self.stream().map(Ok)
49 }
50}