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>
11where
12 Item: Send,
13 Self: Send + Sized,
14{
15 fn ignore_err(self) -> impl Stream<Item = Item> + Send;
25
26 fn ignore_ok(self) -> impl Stream<Item = Error> + Send;
31}
32
33impl<Item, S> TryIgnore<Item> for S
34where
35 S: Stream<Item = Result<Item>> + Send + TryStream + TryExpect<Item>,
36 Item: Send,
37 Self: Send + Sized,
38{
39 #[cfg(debug_assertions)]
40 #[inline]
41 fn ignore_err(self: S) -> impl Stream<Item = Item> + Send { self.expect_ok() }
42
43 #[cfg(not(debug_assertions))]
44 #[inline]
45 fn ignore_err(self: S) -> impl Stream<Item = Item> + Send {
46 self.filter_map(|res| ready(res.ok()))
47 }
48
49 #[inline]
50 fn ignore_ok(self: S) -> impl Stream<Item = Error> + Send {
51 self.filter_map(|res| ready(res.err()))
52 }
53}