MultiState

Trait MultiState 

Source
pub trait MultiState<ID: EventId, E: Event + Clone> {
    // Required methods
    fn mutate_all<I: Into<StreamItem<ID, E>>>(&mut self, item: I);
    fn query_all(&self) -> StreamQuery<ID, E>;
    fn version(&self) -> ID;
}
Expand description

A group of states that can be queried and modified together.

The states can be mutated collectively based on an event retrieved from the event store, and a unified query can be generated for all sub-states.

§Type Parameters

  • E: The type of events that the multi-state object handles.

Required Methods§

Source

fn mutate_all<I: Into<StreamItem<ID, E>>>(&mut self, item: I)

Mutates all sub-states based on the provided event.

§Arguments
  • event - The event to be applied to mutate the sub-states.
Source

fn query_all(&self) -> StreamQuery<ID, E>

The unified query that represents the union of queries for all sub-states.

This query can be used to retrieve a stream of events relevant to the entire multi-state object.

§Returns

A StreamQuery representing the combined query for all sub-states.

Source

fn version(&self) -> ID

Returns the version of the multi-state.

The multi-state version is determined as the maximum of the versions of its sub-states.

§Returns

The method returns an EventId representing the version of the multi-state.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl<ID: EventId, E, T1, T2> MultiState<ID, E> for (StatePart<ID, T1>, StatePart<ID, T2>)
where E: Event + Clone, T1: StateQuery + StateMutate, T2: StateQuery + StateMutate, <T2 as StateQuery>::Event: TryFrom<E> + Into<E>, <T1 as StateQuery>::Event: TryFrom<E> + Into<E>, <<T1 as StateQuery>::Event as TryFrom<E>>::Error: StdError + 'static + Send + Sync, <<T2 as StateQuery>::Event as TryFrom<E>>::Error: StdError + 'static + Send + Sync,

Source§

fn mutate_all<I: Into<StreamItem<ID, E>>>(&mut self, item: I)

Source§

fn query_all(&self) -> StreamQuery<ID, E>

Source§

fn version(&self) -> ID

Source§

impl<ID: EventId, E, T1, T2, T3> MultiState<ID, E> for (StatePart<ID, T1>, StatePart<ID, T2>, StatePart<ID, T3>)
where E: Event + Clone, T1: StateQuery + StateMutate, T2: StateQuery + StateMutate, T3: StateQuery + StateMutate, <T3 as StateQuery>::Event: TryFrom<E> + Into<E>, <T1 as StateQuery>::Event: TryFrom<E> + Into<E>, <T2 as StateQuery>::Event: TryFrom<E> + Into<E>, <<T1 as StateQuery>::Event as TryFrom<E>>::Error: StdError + 'static + Send + Sync, <<T2 as StateQuery>::Event as TryFrom<E>>::Error: StdError + 'static + Send + Sync, <<T3 as StateQuery>::Event as TryFrom<E>>::Error: StdError + 'static + Send + Sync,

Source§

fn mutate_all<I: Into<StreamItem<ID, E>>>(&mut self, item: I)

Source§

fn query_all(&self) -> StreamQuery<ID, E>

Source§

fn version(&self) -> ID

Source§

impl<ID: EventId, E, T1, T2, T3, T4> MultiState<ID, E> for (StatePart<ID, T1>, StatePart<ID, T2>, StatePart<ID, T3>, StatePart<ID, T4>)
where E: Event + Clone, T1: StateQuery + StateMutate, T2: StateQuery + StateMutate, T3: StateQuery + StateMutate, T4: StateQuery + StateMutate, <T4 as StateQuery>::Event: TryFrom<E> + Into<E>, <T1 as StateQuery>::Event: TryFrom<E> + Into<E>, <T2 as StateQuery>::Event: TryFrom<E> + Into<E>, <T3 as StateQuery>::Event: TryFrom<E> + Into<E>, <<T1 as StateQuery>::Event as TryFrom<E>>::Error: StdError + 'static + Send + Sync, <<T2 as StateQuery>::Event as TryFrom<E>>::Error: StdError + 'static + Send + Sync, <<T3 as StateQuery>::Event as TryFrom<E>>::Error: StdError + 'static + Send + Sync, <<T4 as StateQuery>::Event as TryFrom<E>>::Error: StdError + 'static + Send + Sync,

Source§

fn mutate_all<I: Into<StreamItem<ID, E>>>(&mut self, item: I)

Source§

fn query_all(&self) -> StreamQuery<ID, E>

Source§

fn version(&self) -> ID

Source§

impl<ID: EventId, E, T1, T2, T3, T4, T5> MultiState<ID, E> for (StatePart<ID, T1>, StatePart<ID, T2>, StatePart<ID, T3>, StatePart<ID, T4>, StatePart<ID, T5>)
where E: Event + Clone, T1: StateQuery + StateMutate, T2: StateQuery + StateMutate, T3: StateQuery + StateMutate, T4: StateQuery + StateMutate, T5: StateQuery + StateMutate, <T5 as StateQuery>::Event: TryFrom<E> + Into<E>, <T1 as StateQuery>::Event: TryFrom<E> + Into<E>, <T2 as StateQuery>::Event: TryFrom<E> + Into<E>, <T3 as StateQuery>::Event: TryFrom<E> + Into<E>, <T4 as StateQuery>::Event: TryFrom<E> + Into<E>, <<T1 as StateQuery>::Event as TryFrom<E>>::Error: StdError + 'static + Send + Sync, <<T2 as StateQuery>::Event as TryFrom<E>>::Error: StdError + 'static + Send + Sync, <<T3 as StateQuery>::Event as TryFrom<E>>::Error: StdError + 'static + Send + Sync, <<T4 as StateQuery>::Event as TryFrom<E>>::Error: StdError + 'static + Send + Sync, <<T5 as StateQuery>::Event as TryFrom<E>>::Error: StdError + 'static + Send + Sync,

Source§

fn mutate_all<I: Into<StreamItem<ID, E>>>(&mut self, item: I)

Source§

fn query_all(&self) -> StreamQuery<ID, E>

Source§

fn version(&self) -> ID

Implementors§

Source§

impl<ID: EventId, E, T1> MultiState<ID, E> for StatePart<ID, T1>
where E: Event + Clone, T1: StateQuery + StateMutate, <T1 as StateQuery>::Event: TryFrom<E> + Into<E>, <<T1 as StateQuery>::Event as TryFrom<E>>::Error: StdError + 'static + Send + Sync,