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