pub struct ArcConditionalBiConsumer<T, U> { /* private fields */ }Expand description
ArcConditionalBiConsumer struct
A thread-safe conditional bi-consumer that only executes when a predicate is
satisfied. Uses ArcBiConsumer and ArcBiPredicate for shared ownership across
threads.
This type is typically created by calling ArcBiConsumer::when() and is
designed to work with the or_else() method to create if-then-else logic.
§Features
- Shared Ownership: Cloneable via
Arc, multiple owners allowed - Thread-Safe: Implements
Send + Sync, safe for concurrent use - Conditional Execution: Only consumes when predicate returns
true - Chainable: Can add
or_elsebranch to create if-then-else logic
§Examples
use prism3_function::{BiConsumer, ArcBiConsumer};
use std::sync::{Arc, Mutex};
let log = Arc::new(Mutex::new(Vec::new()));
let l = log.clone();
let conditional = ArcBiConsumer::new(move |x: &i32, y: &i32| {
l.lock().unwrap().push(*x + *y);
}).when(|x: &i32, y: &i32| *x > 0 && *y > 0);
let conditional_clone = conditional.clone();
let mut value = 5;
let mut m = conditional;
m.accept(&value, &3);
assert_eq!(*log.lock().unwrap(), vec![8]);§Author
Haixing Hu
Implementations§
Source§impl<T, U> ArcConditionalBiConsumer<T, U>
impl<T, U> ArcConditionalBiConsumer<T, U>
Sourcepub fn or_else<C>(&self, else_consumer: C) -> ArcBiConsumer<T, U>
pub fn or_else<C>(&self, else_consumer: C) -> ArcBiConsumer<T, U>
Adds an else branch (thread-safe version)
Executes the original consumer when the condition is satisfied, otherwise executes else_consumer.
§Parameters
else_consumer- The consumer for the else branch. Note: This parameter is passed by value and will transfer ownership. If you need to preserve the original consumer, clone it first (if it implementsClone). Must beSend, can be:- A closure:
|x: &T, y: &U|(must beSend) - An
ArcBiConsumer<T, U> - A
BoxBiConsumer<T, U> - Any type implementing
BiConsumer<T, U> + Send
- A closure:
§Returns
Returns the composed ArcBiConsumer<T, U>
§Examples
§Using a closure (recommended)
use prism3_function::{BiConsumer, ArcBiConsumer};
use std::sync::{Arc, Mutex};
let log = Arc::new(Mutex::new(Vec::new()));
let l1 = log.clone();
let l2 = log.clone();
let mut consumer = ArcBiConsumer::new(move |x: &i32, y: &i32| {
l1.lock().unwrap().push(*x + *y);
}).when(|x: &i32, y: &i32| *x > 0 && *y > 0)
.or_else(move |x: &i32, y: &i32| {
l2.lock().unwrap().push(*x * *y);
});
consumer.accept(&5, &3);
assert_eq!(*log.lock().unwrap(), vec![8]);
consumer.accept(&-5, &3);
assert_eq!(*log.lock().unwrap(), vec![8, -15]);Trait Implementations§
Source§impl<T, U> BiConsumer<T, U> for ArcConditionalBiConsumer<T, U>
impl<T, U> BiConsumer<T, U> for ArcConditionalBiConsumer<T, U>
Source§fn into_box(self) -> BoxBiConsumer<T, U>where
T: 'static,
U: 'static,
fn into_box(self) -> BoxBiConsumer<T, U>where
T: 'static,
U: 'static,
Converts to BoxBiConsumer Read more
Source§fn into_rc(self) -> RcBiConsumer<T, U>where
T: 'static,
U: 'static,
fn into_rc(self) -> RcBiConsumer<T, U>where
T: 'static,
U: 'static,
Converts to RcBiConsumer Read more
Source§fn into_arc(self) -> ArcBiConsumer<T, U>
fn into_arc(self) -> ArcBiConsumer<T, U>
Converts to ArcBiConsumer Read more
Source§fn into_fn(self) -> impl FnMut(&T, &U)where
T: 'static,
U: 'static,
fn into_fn(self) -> impl FnMut(&T, &U)where
T: 'static,
U: 'static,
Converts bi-consumer to a closure Read more
Source§fn to_box(&self) -> BoxBiConsumer<T, U>
fn to_box(&self) -> BoxBiConsumer<T, U>
Converts to BoxBiConsumer (non-consuming) Read more
Source§fn to_rc(&self) -> RcBiConsumer<T, U>
fn to_rc(&self) -> RcBiConsumer<T, U>
Converts to RcBiConsumer (non-consuming) Read more
Source§fn to_arc(&self) -> ArcBiConsumer<T, U>
fn to_arc(&self) -> ArcBiConsumer<T, U>
Converts to ArcBiConsumer (non-consuming) Read more
Source§impl<T, U> Clone for ArcConditionalBiConsumer<T, U>
impl<T, U> Clone for ArcConditionalBiConsumer<T, U>
Auto Trait Implementations§
impl<T, U> Freeze for ArcConditionalBiConsumer<T, U>
impl<T, U> !RefUnwindSafe for ArcConditionalBiConsumer<T, U>
impl<T, U> Send for ArcConditionalBiConsumer<T, U>
impl<T, U> Sync for ArcConditionalBiConsumer<T, U>
impl<T, U> Unpin for ArcConditionalBiConsumer<T, U>
impl<T, U> !UnwindSafe for ArcConditionalBiConsumer<T, U>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more