Skip to main content

Message

Enum Message 

Source
pub enum Message<T> {
    Start,
    Pause(LockId),
    Resume(LockId),
    Pull(PullDemand),
    Dirty,
    Data(T),
    Resolved,
    Invalidate,
    Complete,
    Error(GraphError),
    Teardown,
}
Expand description

One protocol message. A Vec<Message<T>> (Wave) is one wave (D8) and may mix tiers. The closed set is 11 kinds (D9 + D269 + the Start handshake); adding a kind is a constitutional change (/spec-amend).

Debug is hand-written to print only the kind tag (not the payload), so Message<AnyValue> — whose payload Rc<dyn Any> is not Debug — stays assertable: tests compare wave shapes like ["DIRTY", "DATA"].

Variants§

§

Start

Subscribe handshake (substrate-internal, not a user ctx.up kind).

§

Pause(LockId)

Acquire a pause lock (control, up-allowed).

§

Resume(LockId)

Release a pause lock (control, up-allowed).

§

Pull(PullDemand)

Demand one pull delivery from the matching pullId holder (control/demand, up-allowed). RESUME is pause-lock release only (D269).

§

Dirty

Dirty notification — phase 1 of the two-phase wave (notification, up-allowed).

§

Data(T)

A real value (value tier, down-only). Absence-of-DATA is the SENTINEL (None per D16), represented at the node’s per-dep cache, not as a message.

§

Resolved

Settle with no value change (value tier, down-only).

§

Invalidate

Invalidate-request — cache-drop, fire onInvalidate, cascade (settle, up-allowed: a depless source honors it at the terminus per D38/R-up-at-source).

§

Complete

Terminal success (down-only).

§

Error(GraphError)

Terminal failure carrying the untyped error (down-only, D31).

§

Teardown

Teardown (up-allowed; a depless source drops it per D38).

Implementations§

Source§

impl<T> Message<T>

Source

pub fn tier(&self) -> Tier

The tier of this message per the D34 const table.

Source

pub fn is_up_allowed(&self) -> bool

Whether this kind may travel upstream via ctx.up (R-ctx-up).

Control/demand-tier only: DIRTY / PAUSE / RESUME / PULL / INVALIDATE / TEARDOWN. DATA / RESOLVED / COMPLETE / ERROR are down-only. START is a substrate handshake, not a user ctx.up kind.

Trait Implementations§

Source§

impl<T> Debug for Message<T>

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<T> Freeze for Message<T>
where T: Freeze,

§

impl<T> !RefUnwindSafe for Message<T>

§

impl<T> !Send for Message<T>

§

impl<T> !Sync for Message<T>

§

impl<T> Unpin for Message<T>
where T: Unpin,

§

impl<T> UnsafeUnpin for Message<T>
where T: UnsafeUnpin,

§

impl<T> !UnwindSafe for Message<T>

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> 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.

§

impl<T> PolicyExt for T
where T: ?Sized,

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
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
§

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> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,