pub struct MutateContext<'a, State = ()> { /* private fields */ }Expand description
State and recursive operations shared by mutation callbacks and context policies.
A matched callback owns mutation of its value. Recursive operations reborrow the mutator, so mutable state cannot remain borrowed across them. The context does not store a node: inspect the callback argument and pass it explicitly to default recursion.
Implementations§
Source§impl<State> MutateContext<'_, State>
impl<State> MutateContext<'_, State>
Sourcepub fn state_mut(&mut self) -> &mut State
pub fn state_mut(&mut self) -> &mut State
Mutably borrow the user state.
Sourcepub fn inplace_mode(&self) -> InplaceMode
pub fn inplace_mode(&self) -> InplaceMode
Engine-established permission for this callback’s current value.
This is not authority to modify a borrow: default in-place descent also
requires consuming a MutateValue.
Sourcepub fn def_region_kind(&self) -> DefRegionKind
pub fn def_region_kind(&self) -> DefRegionKind
Definition-region state active at the callback’s current value.
Sourcepub fn with_def_region_kind<T>(
&mut self,
kind: DefRegionKind,
callback: impl FnOnce(&mut MutateContext<'_, State>) -> Result<T>,
) -> Result<T>
pub fn with_def_region_kind<T>( &mut self, kind: DefRegionKind, callback: impl FnOnce(&mut MutateContext<'_, State>) -> Result<T>, ) -> Result<T>
Run recursive operations in a definition region, preserving an outer Pattern. The previous context is restored on return, error, or unwinding.
Sourcepub fn mutate<T>(&mut self, value: &T) -> Result<Any>
pub fn mutate<T>(&mut self, value: &T) -> Result<Any>
Mutate a borrowed value through the same callback chain. The value and its descendants begin on the non-in-place path.
Sourcepub fn mutate_with<T>(
&mut self,
value: &T,
def_region_kind: DefRegionKind,
) -> Result<Any>
pub fn mutate_with<T>( &mut self, value: &T, def_region_kind: DefRegionKind, ) -> Result<Any>
Mutate a borrowed value under an explicit definition-region state.
Sourcepub fn maybe_inplace_mutate<T: Into<Any>>(&mut self, value: T) -> Result<Any>
pub fn maybe_inplace_mutate<T: Into<Any>>(&mut self, value: T) -> Result<Any>
Mutate an owned value, allowing an in-place attempt when it remains uniquely owned and no matched callback borrows it.
Sourcepub fn maybe_inplace_mutate_with<T: Into<Any>>(
&mut self,
value: T,
def_region_kind: DefRegionKind,
) -> Result<Any>
pub fn maybe_inplace_mutate_with<T: Into<Any>>( &mut self, value: T, def_region_kind: DefRegionKind, ) -> Result<Any>
Mutate an owned value under an explicit definition-region state.
Sourcepub fn maybe_inplace_mutate_with_mode<T: Into<Any>>(
&mut self,
value: T,
def_region_kind: DefRegionKind,
mode: InplaceMode,
) -> Result<Any>
pub fn maybe_inplace_mutate_with_mode<T: Into<Any>>( &mut self, value: T, def_region_kind: DefRegionKind, mode: InplaceMode, ) -> Result<Any>
Mutate an owned value under an explicit region and in-place permission.
Disallow keeps this input on the copy path even when uniquely owned.
Sourcepub fn default_mutate<T>(&mut self, value: &T) -> Result<Any>
pub fn default_mutate<T>(&mut self, value: &T) -> Result<Any>
Apply default copy-only mutation to an explicitly borrowed value.
This may be called repeatedly while holding node borrows. The value’s children re-enter callback dispatch, but the value itself does not.
Sourcepub fn mutate_result<T>(&mut self, value: &T) -> Result<UnchangedOr<Any>>
pub fn mutate_result<T>(&mut self, value: &T) -> Result<UnchangedOr<Any>>
Mutate a borrowed child while preserving an unchanged result.
Sourcepub fn mutate_with_result<T>(
&mut self,
value: &T,
kind: DefRegionKind,
) -> Result<UnchangedOr<Any>>
pub fn mutate_with_result<T>( &mut self, value: &T, kind: DefRegionKind, ) -> Result<UnchangedOr<Any>>
Mutate a borrowed child under an explicit region, preserving unchanged.
Sourcepub fn default_mutate_result<T>(
&mut self,
value: &T,
) -> Result<UnchangedOr<Any>>
pub fn default_mutate_result<T>( &mut self, value: &T, ) -> Result<UnchangedOr<Any>>
Apply default mutation without materializing an unchanged original.
Sourcepub fn default_maybe_inplace_mutate<T>(
&mut self,
value: MutateValue<'_, T>,
) -> Result<Any>
pub fn default_maybe_inplace_mutate<T>( &mut self, value: MutateValue<'_, T>, ) -> Result<Any>
Consume the handle for default descent with its existing permission.
Sourcepub fn default_maybe_inplace_mutate_result<T>(
&mut self,
value: MutateValue<'_, T>,
) -> Result<UnchangedOr<Any>>
pub fn default_maybe_inplace_mutate_result<T>( &mut self, value: MutateValue<'_, T>, ) -> Result<UnchangedOr<Any>>
Consume the handle for default descent, preserving permission and Unchanged.
Sourcepub fn default_mutate_with_mode<T>(
&mut self,
value: MutateValue<'_, T>,
mode: InplaceMode,
) -> Result<Any>
pub fn default_mutate_with_mode<T>( &mut self, value: MutateValue<'_, T>, mode: InplaceMode, ) -> Result<Any>
Continue default mutation after relinquishing the callback value’s borrows.
The mode can restrict, but cannot upgrade, the handle’s permission. Retained owning aliases force copying; temporary handles can be dropped before this call to preserve reuse of the current value.
Sourcepub fn default_mutate_with_mode_result<T>(
&mut self,
value: MutateValue<'_, T>,
mode: InplaceMode,
) -> Result<UnchangedOr<Any>>
pub fn default_mutate_with_mode_result<T>( &mut self, value: MutateValue<'_, T>, mode: InplaceMode, ) -> Result<UnchangedOr<Any>>
Consume the callback value for default descent, preserving Unchanged.
Sourcepub fn var_remap_get(&mut self, var: &StructuralView) -> Result<Option<Any>>
pub fn var_remap_get(&mut self, var: &StructuralView) -> Result<Option<Any>>
Look up an invocation-local identity substitution.
Sourcepub fn var_remap_set(
&mut self,
var: &StructuralView,
mutated_value: &Any,
) -> Result<()>
pub fn var_remap_set( &mut self, var: &StructuralView, mutated_value: &Any, ) -> Result<()>
Store an invocation-local identity substitution.