pub struct EffectStoreWithMiddleware<S, A, E, M>where
A: Action,
M: Middleware<S, A>,{ /* private fields */ }Expand description
An effect store with middleware support.
Wraps an EffectStore and calls middleware hooks before and after
each dispatch. The middleware receives action references and the
state change indicator, but not the effects.
§Example
use tui_dispatch::{ReducerResult, EffectStoreWithMiddleware};
use tui_dispatch::debug::ActionLoggerMiddleware;
let middleware = ActionLoggerMiddleware::with_default_log();
let mut store = EffectStoreWithMiddleware::new(
State::default(),
reducer,
middleware,
);
let result = store.dispatch(Action::Something);
// Middleware logged the action
// result.effects contains any effects to processImplementations§
Source§impl<S, A, E, M> EffectStoreWithMiddleware<S, A, E, M>where
A: Action,
M: Middleware<S, A>,
impl<S, A, E, M> EffectStoreWithMiddleware<S, A, E, M>where
A: Action,
M: Middleware<S, A>,
Sourcepub fn new(state: S, reducer: EffectReducer<S, A, E>, middleware: M) -> Self
pub fn new(state: S, reducer: EffectReducer<S, A, E>, middleware: M) -> Self
Create a new effect store with middleware.
Sourcepub fn with_dispatch_limits(self, limits: DispatchLimits) -> Self
pub fn with_dispatch_limits(self, limits: DispatchLimits) -> Self
Override middleware dispatch limits.
Sourcepub fn dispatch_limits(&self) -> DispatchLimits
pub fn dispatch_limits(&self) -> DispatchLimits
Current middleware dispatch limits.
Sourcepub fn middleware(&self) -> &M
pub fn middleware(&self) -> &M
Get a reference to the middleware.
Sourcepub fn middleware_mut(&mut self) -> &mut M
pub fn middleware_mut(&mut self) -> &mut M
Get a mutable reference to the middleware.
Sourcepub fn dispatch(&mut self, action: A) -> ReducerResult<E>
pub fn dispatch(&mut self, action: A) -> ReducerResult<E>
Dispatch an action through middleware and store.
This wraps Self::try_dispatch and panics if dispatch limits are exceeded.
Use try_dispatch to handle overflow as a typed error.
Sourcepub fn try_dispatch(
&mut self,
action: A,
) -> Result<ReducerResult<E>, DispatchError>
pub fn try_dispatch( &mut self, action: A, ) -> Result<ReducerResult<E>, DispatchError>
Dispatch an action through middleware and store.
The action passes through middleware.before() (which can cancel it),
then the reducer, then middleware.after() (which can inject follow-up actions).
Injected actions go through the full pipeline in depth-first order; their effects
are merged into the returned result.
Returns DispatchError if configured depth or action budget limits are exceeded.
This operation is not transactional: if overflow happens in an injected chain, earlier actions in the chain may have already mutated state.
Action budget accounting includes attempted dispatches that are later cancelled by
Middleware::before.
Trait Implementations§
Source§impl<S, A: Action, E, M: Middleware<S, A>> EffectStoreLike<S, A, E> for EffectStoreWithMiddleware<S, A, E, M>
impl<S, A: Action, E, M: Middleware<S, A>> EffectStoreLike<S, A, E> for EffectStoreWithMiddleware<S, A, E, M>
Source§fn dispatch(&mut self, action: A) -> ReducerResult<E>
fn dispatch(&mut self, action: A) -> ReducerResult<E>
Source§fn try_dispatch(&mut self, action: A) -> Result<ReducerResult<E>, DispatchError>
fn try_dispatch(&mut self, action: A) -> Result<ReducerResult<E>, DispatchError>
Auto Trait Implementations§
impl<S, A, E, M> Freeze for EffectStoreWithMiddleware<S, A, E, M>
impl<S, A, E, M> RefUnwindSafe for EffectStoreWithMiddleware<S, A, E, M>
impl<S, A, E, M> Send for EffectStoreWithMiddleware<S, A, E, M>
impl<S, A, E, M> Sync for EffectStoreWithMiddleware<S, A, E, M>
impl<S, A, E, M> Unpin for EffectStoreWithMiddleware<S, A, E, M>
impl<S, A, E, M> UnsafeUnpin for EffectStoreWithMiddleware<S, A, E, M>where
M: UnsafeUnpin,
S: UnsafeUnpin,
impl<S, A, E, M> UnwindSafe for EffectStoreWithMiddleware<S, A, E, M>
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
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more