tuwunel_core/utils/stream/
ignore.rs1use futures::{Stream, StreamExt, TryStream, future::ready};
2
3use crate::{Error, Result, utils::stream::TryExpect};
4
5pub trait TryIgnore<Item>
6where
7 Item: Send,
8 Self: Send + Sized,
9{
10 fn ignore_err(self) -> impl Stream<Item = Item> + Send;
11
12 fn ignore_ok(self) -> impl Stream<Item = Error> + Send;
13}
14
15impl<Item, S> TryIgnore<Item> for S
16where
17 S: Stream<Item = Result<Item>> + Send + TryStream + TryExpect<Item>,
18 Item: Send,
19 Self: Send + Sized,
20{
21 #[cfg(debug_assertions)]
22 #[inline]
23 fn ignore_err(self: S) -> impl Stream<Item = Item> + Send { self.expect_ok() }
24
25 #[cfg(not(debug_assertions))]
26 #[inline]
27 fn ignore_err(self: S) -> impl Stream<Item = Item> + Send {
28 self.filter_map(|res| ready(res.ok()))
29 }
30
31 #[inline]
32 fn ignore_ok(self: S) -> impl Stream<Item = Error> + Send {
33 self.filter_map(|res| ready(res.err()))
34 }
35}