use std::time::Duration;
use super::Subscription;
use super::combinators::{
DebounceSubscription, FilterSubscription, MappedSubscription, TakeSubscription,
ThrottleSubscription,
};
pub trait SubscriptionExt<M>: Subscription<M> + Sized {
fn map<N, F>(self, f: F) -> MappedSubscription<M, N, F, Self>
where
F: Fn(M) -> N + Send + 'static,
{
MappedSubscription::new(self, f)
}
fn filter<P>(self, predicate: P) -> FilterSubscription<M, Self, P>
where
P: Fn(&M) -> bool + Send + 'static,
{
FilterSubscription::new(self, predicate)
}
fn take(self, count: usize) -> TakeSubscription<M, Self> {
TakeSubscription::new(self, count)
}
fn debounce(self, duration: Duration) -> DebounceSubscription<M, Self> {
DebounceSubscription::new(self, duration)
}
fn throttle(self, duration: Duration) -> ThrottleSubscription<M, Self> {
ThrottleSubscription::new(self, duration)
}
}
impl<M, S: Subscription<M>> SubscriptionExt<M> for S {}