pub struct MutexSyncExecutor<K, M>{ /* private fields */ }
Expand description
Struct that implements the ModeWrapper
and Invoker
traits for any type that borrows MutexSync
and a specific key. Enables using
MutexSync
as a ModeWrapper
or Invoker
.
Trait Implementations§
Source§impl<K, M> Invoker for MutexSyncExecutor<K, M>
impl<K, M> Invoker for MutexSyncExecutor<K, M>
Source§fn do_invoke<'f, T: 'f, F: FnOnce() -> T + 'f>(
&'f self,
mode: Option<&'f Mode<'f, T>>,
task: F,
) -> T
fn do_invoke<'f, T: 'f, F: FnOnce() -> T + 'f>( &'f self, mode: Option<&'f Mode<'f, T>>, task: F, ) -> T
Core function responsible for actually invoking the task. This allows implementors to easily override
how tasks are invoked without having to worry about doing any administrative tasks such as calling
pre_invoke
and post_invoke
as would be the case when overriding invoke_with_mode_optional
.Source§fn pre_invoke(&self)
fn pre_invoke(&self)
Called by
invoke_with_mode_optional
before
invoking each task. Can be used to run code before a task is invoked.Source§fn invoke_with_mode<'f, T: 'f, F: FnOnce() -> T + 'f>(
&'f self,
mode: &'f Mode<'f, T>,
task: F,
) -> T
fn invoke_with_mode<'f, T: 'f, F: FnOnce() -> T + 'f>( &'f self, mode: &'f Mode<'f, T>, task: F, ) -> T
Invoke a task with a
Mode
. The default implementation for do_invoke
delegates to crate::invoke
if a mode was supplied. The Mode
is applied to
the task invoked by this Invoker
, meaning the task of modes will run inside the
do_invoke
invocation so that logic run by
the invoker before the task runs executes before the modes and logic run by the
invoker after the task executes after the modes.Source§fn invoke_with_mode_optional<'f, T: 'f, F: FnOnce() -> T + 'f>(
&'f self,
mode: Option<&'f Mode<'f, T>>,
task: F,
) -> T
fn invoke_with_mode_optional<'f, T: 'f, F: FnOnce() -> T + 'f>( &'f self, mode: Option<&'f Mode<'f, T>>, task: F, ) -> T
Source§fn post_invoke(&self)
fn post_invoke(&self)
Called by
invoke_with_mode_optional
after
invoking each task. Can be used to run code after a task is invoked.Source§fn invoke_post_invoke_on_panic(&self) -> bool
fn invoke_post_invoke_on_panic(&self) -> bool
Return true if
post_invoke
should be called even if
the task panicked using a Sentinel
, defaults to false.Source§fn and_then<I: Invoker>(self, inner: I) -> CombinedInvoker<Self, I>where
Self: Sized,
fn and_then<I: Invoker>(self, inner: I) -> CombinedInvoker<Self, I>where
Self: Sized,
Combines this
Invoker
with another Invoker
by creating a CombinedInvoker
that invokes tasks by first calling this Invoker
with a task that submits the supplied task to the
other Invoker
, meaning the other Invoker
will run inside this Invoker
in such a way that the logic
of this Invoker
that runs before the task executes before the logic of the other Invoker
but the logic
of this Invoker
that runs after the task executes after the logic of the other Invoker
.Source§impl<T, K, M> ModeWrapper<'static, T> for MutexSyncExecutor<K, M>
impl<T, K, M> ModeWrapper<'static, T> for MutexSyncExecutor<K, M>
Source§fn wrap<'f>(
self: Arc<Self>,
task: Box<dyn FnOnce() -> T + 'f>,
) -> Box<dyn FnOnce() -> T + 'f>
fn wrap<'f>( self: Arc<Self>, task: Box<dyn FnOnce() -> T + 'f>, ) -> Box<dyn FnOnce() -> T + 'f>
Applies this ModeWrapper to a task by wrapping the supplied boxed function into a new boxed function
with the same return type and lifetime, both of which this ModeWrapper is generic over.
Source§fn into_combiner(self) -> Box<dyn ModeCombiner<'m, T> + Send + Sync + 'm>
fn into_combiner(self) -> Box<dyn ModeCombiner<'m, T> + Send + Sync + 'm>
Consume this ModeWrapper and produce a
ModeCombiner
. This is used by
Mode::with
to be able to combine several ModeWrappers and can
reference back to this ModeWrapper to wrap tasks when applying a Mode to a task. Combining
ModeWrappers is implemented by a separate trait to be able to provide a default implementation
in DelegatingModeCombiner
that combines ModeCombiners
by
setting the current ModeCombiner
as the outer ModeCombiner
of the newly added ModeCombiner
so that the iterator walks the ModeCombiners
in the reverse order of which they were added, meaning
the ModeCombiner
that was added first ends up wrapping the task last, meaning its task will be the
outermost task.Auto Trait Implementations§
impl<K, M> Freeze for MutexSyncExecutor<K, M>
impl<K, M> RefUnwindSafe for MutexSyncExecutor<K, M>where
K: RefUnwindSafe,
M: RefUnwindSafe,
impl<K, M> Send for MutexSyncExecutor<K, M>where
M: Send,
impl<K, M> Sync for MutexSyncExecutor<K, M>where
M: Sync,
impl<K, M> Unpin for MutexSyncExecutor<K, M>
impl<K, M> UnwindSafe for MutexSyncExecutor<K, M>where
K: UnwindSafe,
M: UnwindSafe,
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