pub struct RcReadonlyConsumer<T> { /* private fields */ }Expand description
RcReadonlyConsumer struct
Readonly consumer implementation based on Rc<dyn Fn(&T)> for
single-threaded shared ownership scenarios. No RefCell needed because
operations are readonly.
§Features
- Shared Ownership: Cloneable through
Rc, allows multiple owners - Single-threaded: Not thread-safe, cannot be sent across threads
- No Interior Mutability Overhead: No RefCell needed because it’s readonly
- Non-consuming API:
and_thenborrows&self, original object remains usable
§Use Cases
Choose RcReadonlyConsumer when:
- Need to share readonly consumer within a single thread
- Pure observation operations, performance critical
- Event handling in single-threaded UI frameworks
§Performance Advantages
RcReadonlyConsumer has neither Arc’s atomic operation overhead nor
RefCell’s runtime borrow checking overhead, making it the most performant of
the three readonly consumers.
§Examples
use prism3_function::{ReadonlyConsumer, RcReadonlyConsumer};
let consumer = RcReadonlyConsumer::new(|x: &i32| {
println!("Observed: {}", x);
});
let clone = consumer.clone();
consumer.accept(&5);
clone.accept(&10);§Author
Hu Haixing
Implementations§
Source§impl<T> RcReadonlyConsumer<T>where
T: 'static,
impl<T> RcReadonlyConsumer<T>where
T: 'static,
Sourcepub fn new<F>(f: F) -> Self
pub fn new<F>(f: F) -> Self
Create a new RcReadonlyConsumer
§Type Parameters
F- Closure type
§Parameters
f- Closure to wrap
§Returns
Returns a new RcReadonlyConsumer<T> instance
§Examples
use prism3_function::{ReadonlyConsumer, RcReadonlyConsumer};
let consumer = RcReadonlyConsumer::new(|x: &i32| {
println!("Value: {}", x);
});
consumer.accept(&5);Sourcepub fn and_then(&self, next: &RcReadonlyConsumer<T>) -> RcReadonlyConsumer<T>
pub fn and_then(&self, next: &RcReadonlyConsumer<T>) -> RcReadonlyConsumer<T>
Sequentially chain another RcReadonlyConsumer
Returns a new consumer that executes the current operation first, then the next operation. Borrows &self, does not consume the original consumer.
§Parameters
next- Consumer to execute after the current operation. Note: This parameter is passed by reference, so the original consumer remains usable. Can be:- An
RcReadonlyConsumer<T>(passed by reference) - Any type implementing
ReadonlyConsumer<T>
- An
§Returns
Returns a new combined RcReadonlyConsumer<T>
§Examples
use prism3_function::{ReadonlyConsumer, RcReadonlyConsumer};
let first = RcReadonlyConsumer::new(|x: &i32| {
println!("First: {}", x);
});
let second = RcReadonlyConsumer::new(|x: &i32| {
println!("Second: {}", x);
});
// second is passed by reference, so it remains usable
let chained = first.and_then(&second);
// first and second remain usable after chaining
chained.accept(&5);
first.accept(&3); // Still usable
second.accept(&7); // Still usableTrait Implementations§
Source§impl<T> Clone for RcReadonlyConsumer<T>
impl<T> Clone for RcReadonlyConsumer<T>
Source§impl<T> Debug for RcReadonlyConsumer<T>
impl<T> Debug for RcReadonlyConsumer<T>
Source§impl<T> Display for RcReadonlyConsumer<T>
impl<T> Display for RcReadonlyConsumer<T>
Source§impl<T> ReadonlyConsumer<T> for RcReadonlyConsumer<T>
impl<T> ReadonlyConsumer<T> for RcReadonlyConsumer<T>
Source§fn into_box(self) -> BoxReadonlyConsumer<T>where
T: 'static,
fn into_box(self) -> BoxReadonlyConsumer<T>where
T: 'static,
Convert to BoxReadonlyConsumer Read more
Source§fn into_rc(self) -> RcReadonlyConsumer<T>where
T: 'static,
fn into_rc(self) -> RcReadonlyConsumer<T>where
T: 'static,
Convert to RcReadonlyConsumer Read more
Source§fn to_box(&self) -> BoxReadonlyConsumer<T>where
T: 'static,
fn to_box(&self) -> BoxReadonlyConsumer<T>where
T: 'static,
Non-consuming conversion to
BoxReadonlyConsumer Read moreSource§fn to_rc(&self) -> RcReadonlyConsumer<T>where
T: 'static,
fn to_rc(&self) -> RcReadonlyConsumer<T>where
T: 'static,
Non-consuming conversion to
RcReadonlyConsumer Read moreSource§fn to_fn(&self) -> impl Fn(&T)where
T: 'static,
fn to_fn(&self) -> impl Fn(&T)where
T: 'static,
Non-consuming conversion to a boxed closure Read more
Source§fn into_arc(self) -> ArcReadonlyConsumer<T>
fn into_arc(self) -> ArcReadonlyConsumer<T>
Convert to ArcReadonlyConsumer Read more
Auto Trait Implementations§
impl<T> Freeze for RcReadonlyConsumer<T>
impl<T> !RefUnwindSafe for RcReadonlyConsumer<T>
impl<T> !Send for RcReadonlyConsumer<T>
impl<T> !Sync for RcReadonlyConsumer<T>
impl<T> Unpin for RcReadonlyConsumer<T>
impl<T> !UnwindSafe for RcReadonlyConsumer<T>
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