RcReadonlyConsumer

Struct RcReadonlyConsumer 

Source
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_then borrows &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,

Source

pub fn new<F>(f: F) -> Self
where F: Fn(&T) + 'static,

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);
Source

pub fn noop() -> Self

Create a no-op consumer

§Returns

Returns a no-op consumer

Source

pub fn name(&self) -> Option<&str>

Get the consumer’s name

Source

pub fn set_name(&mut self, name: impl Into<String>)

Set the consumer’s name

Source

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>
§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 usable

Trait Implementations§

Source§

impl<T> Clone for RcReadonlyConsumer<T>

Source§

fn clone(&self) -> Self

Clone RcReadonlyConsumer

Creates a new RcReadonlyConsumer that shares the underlying function with the original instance.

1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<T> Debug for RcReadonlyConsumer<T>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<T> Display for RcReadonlyConsumer<T>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<T> ReadonlyConsumer<T> for RcReadonlyConsumer<T>

Source§

fn accept(&self, value: &T)

Execute readonly consumption operation Read more
Source§

fn into_box(self) -> BoxReadonlyConsumer<T>
where T: 'static,

Convert to BoxReadonlyConsumer Read more
Source§

fn into_rc(self) -> RcReadonlyConsumer<T>
where T: 'static,

Convert to RcReadonlyConsumer Read more
Source§

fn into_fn(self) -> impl Fn(&T)
where T: 'static,

Convert to closure Read more
Source§

fn to_box(&self) -> BoxReadonlyConsumer<T>
where T: 'static,

Non-consuming conversion to BoxReadonlyConsumer Read more
Source§

fn to_rc(&self) -> RcReadonlyConsumer<T>
where T: 'static,

Non-consuming conversion to RcReadonlyConsumer Read more
Source§

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>
where Self: Sized + Send + Sync + 'static, T: Send + Sync + 'static,

Convert to ArcReadonlyConsumer Read more
Source§

fn to_arc(&self) -> ArcReadonlyConsumer<T>
where Self: Clone + Send + Sync + 'static, T: Send + Sync + 'static,

Non-consuming conversion to ArcReadonlyConsumer Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.