Skip to main content

CleanupTrigger

Enum CleanupTrigger 

Source
pub enum CleanupTrigger {
    OnRerun,
    OnDeactivation,
    OnInvalidate,
}
Expand description

Lifecycle trigger discriminator for BindingBoundary::cleanup_for.

Slice E2 (R2.4.5 / Lock 4.A / Lock 4.A′) — the named-hook cleanup spec returned by user fns has three independent slots; Core fires each slot at its own lifecycle moment via cleanup_for(node_id, CleanupTrigger).

All three triggers fire lock-released per Slice E D045 handshake discipline. The binding is responsible for resolving the trigger to its stored cleanup closure (typically a node_id → NodeFnCleanup map) and invoking the matching slot.

Variants§

§

OnRerun

R2.4.5 onRerun — fires before the next fn run within the same activation cycle. Core fires this in fire_regular between the lock-held dep-snapshot phase and the lock-released invoke_fn call, gated on has_fired_once == true (so first-fire never sees an onRerun). The user closure receives no arguments and is expected to release fn-local resources from the previous run before the fresh invoke_fn allocates new ones.

§

OnDeactivation

R2.4.5 onDeactivation — fires when subscriber count drops to zero. Core fires this from Subscription::Drop (alongside the existing BindingBoundary::producer_deactivate call), gated on has_fired_once == true. Order: cleanup-first (OnDeactivation) then producer_deactivate, because cleanup may release handles the producer subscription owns (D056). Per D059, bindings SHOULD clear current_cleanup on this trigger — the next subscribe + first-fire will re-register a fresh closure.

§

OnInvalidate

R2.4.5 onInvalidate — fires when an [[INVALIDATE]] arrives at the node and clears its cache. Per R1.3.9.b strict reading (D057): fires at most once per wave per node, regardless of fan-in shape. Per R1.3.9.c: never fires when the node’s cache is the never-populated sentinel (a node that has not yet emitted has nothing to clean up). Per D058: fires at cache-clear time, not at wire-delivery time — pause buffering doesn’t defer the hook. Per D061: when the wave is panic-discarded mid-flight, queued OnInvalidate hooks are dropped silently (the cleanup never fires for the panicked wave); see BindingBoundary::cleanup_for rustdoc for the panic-discard guarantee gap and the bindings’ idempotent-cleanup recommendation.

Trait Implementations§

Source§

impl Clone for CleanupTrigger

Source§

fn clone(&self) -> CleanupTrigger

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 Debug for CleanupTrigger

Source§

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

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

impl Hash for CleanupTrigger

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for CleanupTrigger

Source§

fn eq(&self, other: &CleanupTrigger) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Copy for CleanupTrigger

Source§

impl Eq for CleanupTrigger

Source§

impl StructuralPartialEq for CleanupTrigger

Auto Trait Implementations§

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<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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<T> Same for T

Source§

type Output = T

Should always be Self
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.