use {
crate::ArcBiConsumer,
crate::ArcBiPredicate,
crate::BiConsumer,
crate::BiPredicate,
crate::consumers::macros::impl_conditional_consumer_clone,
crate::consumers::macros::impl_conditional_consumer_debug_display,
crate::consumers::macros::impl_shared_conditional_consumer,
};
#[must_use = "callback wrappers do nothing unless stored or invoked"]
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,
callback_bounds = (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_clone!(ArcConditionalBiConsumer<T, U>);
impl_conditional_consumer_debug_display!(ArcConditionalBiConsumer<T, U>);