Skip to main content

CowState

Struct CowState 

Source
pub struct CowState<S: State> { /* private fields */ }
Expand description

Copy-on-write state wrapper (default state wrapper)

For large states (e.g., long conversation histories), cloning the entire state for each node spawn is expensive. CowState uses Arc to share immutable state and only clones when modified.

This is the DEFAULT state wrapper in Juncture, not just an optimization.

Implementations§

Source§

impl<S: State> CowState<S>

Source

pub const fn new(state: Arc<S>) -> Self

Create CowState from shared state

Source

pub fn get(&self) -> &S

Get current state (read-only)

Source

pub fn get_mut(&mut self) -> &mut S
where S: Clone,

Get mutable access to the state, cloning the inner Arc if shared

Uses clone-on-write semantics: if the Arc reference count is greater than one, the inner state is cloned before returning a mutable reference. This ensures no other CowState instances are affected by mutations.

Source

pub fn update(&mut self, changes: S::Update)

Apply an update (deferred until commit)

Note: For proper merge semantics, this implementation simply stores the latest update. The proc-macro generates more sophisticated merge logic for complex update types.

Source

pub fn commit(self) -> Arc<S>

Commit updates and return new shared state

Source

pub fn try_commit(self) -> Result<Arc<S>, InvalidUpdateError>

Commit updates and return new shared state, propagating reducer errors

Unlike commit(), this method returns a structured error when reducer constraints are violated (e.g., multiple writers on a replace channel).

§Errors

Returns InvalidUpdateError if the update violates reducer constraints.

Trait Implementations§

Source§

impl<S: State> Clone for CowState<S>

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl<S: Debug + State> Debug for CowState<S>
where S::Update: Debug,

Source§

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

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

impl<S: State> Deref for CowState<S>

Source§

type Target = S

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.

Auto Trait Implementations§

§

impl<S> Freeze for CowState<S>
where <S as State>::Update: Freeze,

§

impl<S> RefUnwindSafe for CowState<S>

§

impl<S> Send for CowState<S>

§

impl<S> Sync for CowState<S>

§

impl<S> Unpin for CowState<S>
where <S as State>::Update: Unpin,

§

impl<S> UnsafeUnpin for CowState<S>
where <S as State>::Update: UnsafeUnpin,

§

impl<S> UnwindSafe for CowState<S>
where S: RefUnwindSafe, <S as State>::Update: UnwindSafe,

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> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
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, 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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more