use super::{
ArcBiConsumer,
ArcBiPredicate,
BiConsumer,
BiPredicate,
BoxBiConsumer,
RcBiConsumer,
impl_conditional_consumer_clone,
impl_conditional_consumer_conversions,
impl_conditional_consumer_debug_display,
impl_shared_conditional_consumer,
};
pub struct ArcConditionalBiConsumer<T, U> {
pub(super) consumer: ArcBiConsumer<T, U>,
pub(super) predicate: ArcBiPredicate<T, U>,
}
impl_shared_conditional_consumer!(
ArcConditionalBiConsumer<T, U>,
ArcBiConsumer,
BiConsumer,
into_arc,
Send + Sync + 'static
);
impl<T, U> BiConsumer<T, U> for ArcConditionalBiConsumer<T, U> {
fn accept(&self, first: &T, second: &U) {
if self.predicate.test(first, second) {
self.consumer.accept(first, second);
}
}
impl_conditional_consumer_conversions!(
BoxBiConsumer<T, U>,
RcBiConsumer,
Fn
);
}
impl_conditional_consumer_clone!(ArcConditionalBiConsumer<T, U>);
impl_conditional_consumer_debug_display!(ArcConditionalBiConsumer<T, U>);