Skip to main content

DispatchOutcome

Struct DispatchOutcome 

Source
pub struct DispatchOutcome {
    pub write_failed: bool,
    pub renderer_signals: Vec<RendererSignal>,
    pub consumed: bool,
    pub effects: Vec<Effect>,
    pub next_actions: Vec<Action>,
    pub declined: bool,
}
Expand description

Result of Editor::dispatch. Carries the renderer-side side-effects the caller must surface after the host-side state mutation completes.

Today the TUI’s runtime loop repaints every tick, so most dispatches return an empty renderer_signals. The Vec shape lets host helpers append signals from nested call sites without having to thread them up the call stack – mirrors how lattice_grammar::Effect::Many already aggregates inner effects.

Fields§

§write_failed: bool

CD.3c: a WriteToFile in the effects being applied did not land. Transient: [apply_effect_host] clears it as soon as it has stopped the batch, so it never reaches a caller.

§renderer_signals: Vec<RendererSignal>

Host-to-renderer side-effects. Empty for the vast majority of dispatches (state changed; renderer just refreshes its per-frame caches on the next tick).

§consumed: bool

Set when the host fully handled the action and the renderer’s post-dispatch match action { ... } body should bail. Used by the read-only-help guard (5.5.D) to short-circuit App’s match from inside Editor::dispatch. Disappears once 5.5.G collapses App’s match entirely; until then it’s the coordination channel that keeps the two halves in lockstep.

§effects: Vec<Effect>

5.5.G.23: deferred effects the host produced (typically from Action::Invoke -> Editor::run_invocation host-side) that the renderer still needs to apply through its App-side effect tail (e.g. Effect::OpenBuffer -> do_edit, Effect::SaveBuffer -> do_write). The host has already called editor.handle_effect(effect.clone()) for every effect in this list, so the App-side consumer must NOT re-run handle_effect when draining; it should only run its renderer-coupled match arms (i.e. call apply_effect_app_arms).

Empty for the vast majority of dispatches (host-only arms emit no effects). The Vec shape lets nested host helpers (run_oil_invocation, etc.) append without threading the outcome up the call stack.

§next_actions: Vec<Action>

5.5.G.23.insert: deferred Actions the host wants the renderer to re-dispatch through its full apply loop. Used when the host-side handler for an Action needs to fire follow-up Actions whose handlers still live App-side (typically LSP autopilots like LspOnTypeFormattingRequest / LspInsertCompletionRequest that depend on spawn_on_lsp_runtime + BatchingSink + AsyncCompletionOutcome — App-resident plumbing). The renderer drains this list via self.apply(action), so each follow-up runs through the same dispatch loop (macro-recording capture, partial-chord clear, etc.) as user-driven actions.

Empty for every host arm that doesn’t need an App-side follow-up. The Vec shape lets host helpers append without threading the outcome up the call stack.

§declined: bool

AP.0.2: set when a grammar action returned Effect::Declined — the chord’s resolved binding did nothing and the dispatcher should re-resolve the chord without that action’s keymap layer (fall through). Read + reset by dispatch_chord.

Implementations§

Source§

impl DispatchOutcome

Source

pub fn take_write_failure(&mut self) -> bool

Drain other into self: append signals, effects, and next_actions; OR the consumed flag. Used by picker-accept paths that delegate to apply_picker_outcome and need to forward the full outcome upward. CD.3c: set by a WriteToFile that did not land, and read (and cleared) by the effect flattener, which then applies nothing more from the batch the write was in. See [apply_effect_host].

Source

pub fn merge(&mut self, other: DispatchOutcome)

Trait Implementations§

Source§

impl Debug for DispatchOutcome

Source§

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

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

impl Default for DispatchOutcome

Source§

fn default() -> DispatchOutcome

Returns the “default value” for a type. Read more

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
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<T> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync> ⓘ

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts 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
§

impl<T> IntoMaybeUndefined<T> for T

§

fn into_maybe_undefined(self) -> MaybeUndefined<T>

Converts this value into a three-state builder argument.
§

impl<T> IntoOption<T> for T

§

fn into_option(self) -> Option<T>

Converts this value into an optional builder argument.
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

impl<T> Pointee for T

§

type Pointer = u32

§

fn debug( pointer: <T as Pointee>::Pointer, f: &mut Formatter<'_>, ) -> Result<(), Error>

§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

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

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more