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> {
9 fn stream(self) -> impl Stream<Item = <I as IntoIterator>::Item> + Send;
11
12 fn try_stream(
14 self,
15 ) -> impl TryStream<
16 Ok = <I as IntoIterator>::Item,
17 Error = Error,
18 Item = Result<<I as IntoIterator>::Item, Error>,
19 > + Send;
20}
21
22impl<I> IterStream<I> for I
23where
24 I: IntoIterator + Send,
25 <I as IntoIterator>::IntoIter: Send,
26{
27 #[inline]
28 fn stream(self) -> impl Stream<Item = <I as IntoIterator>::Item> + Send { stream::iter(self) }
29
30 #[inline]
31 fn try_stream(
32 self,
33 ) -> impl TryStream<
34 Ok = <I as IntoIterator>::Item,
35 Error = Error,
36 Item = Result<<I as IntoIterator>::Item, Error>,
37 > + Send {
38 self.stream().map(Ok)
39 }
40}