selium_server/sink/
mod.rs

1use futures::{sink::With, Future, Sink, SinkExt as _};
2
3mod fanout_many;
4pub use fanout_many::*;
5
6mod router;
7pub use router::*;
8
9// @TODO - awaiting selium#22
10// mod filter;
11// pub use filter::Filter;
12
13// @TODO - awaiting selium#69
14// mod ordered;
15// pub use ordered::Ordered;
16
17impl<T: ?Sized, Item> SinkExt<Item> for T where T: Sink<Item> {}
18
19pub trait SinkExt<Item>: Sink<Item> {
20    // This is a wrapper around `with` for conceptual symmetry with `StreamExt::map`
21    fn map<U, Fut, F, E>(self, f: F) -> With<Self, Item, U, Fut, F>
22    where
23        F: FnMut(U) -> Fut,
24        Fut: Future<Output = Result<Item, E>>,
25        E: From<Self::Error>,
26        Self: Sized,
27    {
28        self.with(f)
29    }
30
31    // @TODO - awaiting selium#22
32    // fn filter<Fut, F>(self, f: F) -> Filter<Self, Fut, F, Item>
33    // where
34    //     F: FnMut(&Item) -> Fut,
35    //     Fut: Future<Output = bool>,
36    //     Self: Sized,
37    // {
38    //     Filter::new(self, f)
39    // }
40
41    // @TODO - awaiting selium#69
42    // fn ordered(self, last_sent: usize) -> Ordered<Self, Item>
43    // where
44    //     Self: Sized,
45    // {
46    //     Ordered::new(self, last_sent)
47    // }
48}