pub trait CoreFull {
Show 23 methods
// Required methods
fn register_state(
&self,
initial: HandleId,
partial: bool,
) -> Result<NodeId, RegisterError>;
fn register_producer(&self, fn_id: FnId) -> Result<NodeId, RegisterError>;
fn subscribe(&self, node_id: NodeId, sink: Sink) -> SubscriptionId;
fn try_subscribe(
&self,
node_id: NodeId,
sink: Sink,
) -> Result<SubscriptionId, SubscribeError>;
fn unsubscribe(&self, node_id: NodeId, sub_id: SubscriptionId);
fn emit(&self, node_id: NodeId, handle: HandleId);
fn complete(&self, node_id: NodeId);
fn error(&self, node_id: NodeId, handle: HandleId);
fn teardown(&self, node_id: NodeId);
fn invalidate(&self, node_id: NodeId);
fn cache_of(&self, node_id: NodeId) -> HandleId;
fn has_fired_once(&self, node_id: NodeId) -> bool;
fn kind_of(&self, node_id: NodeId) -> Option<NodeKind>;
fn deps_of(&self, node_id: NodeId) -> Vec<NodeId>;
fn is_terminal(&self, node_id: NodeId) -> Option<TerminalKind>;
fn is_dirty(&self, node_id: NodeId) -> bool;
fn serialize_handle(&self, handle: HandleId) -> Option<Value>;
fn mailbox(&self) -> Arc<CoreMailbox> ⓘ;
fn defer_queue(&self) -> Rc<DeferQueue>;
fn binding(&self) -> Arc<dyn BindingBoundary> ⓘ;
fn emit_or_defer(&self, node_id: NodeId, new_handle: HandleId);
fn complete_or_defer(&self, node_id: NodeId);
fn error_or_defer(&self, node_id: NodeId, error_handle: HandleId);
}Expand description
Object-safe full-Core re-entry surface (S2b / D233) — the methods a
producer sink’s owner-side crate::mailbox::MailboxOp::Defer
closure needs, by NodeId/HandleId/Sink/id only (no C/T),
blanket-impl’d for every Core. Lets windowing /
higher-order-operator sinks perform value-returning topology mutation
(register_*/subscribe) in-wave without naming the cell type:
the BatchGuard drain-to-quiescence loop calls
f(self as &dyn CoreFull) while it holds the owner &Core.
Required Methods§
Sourcefn register_state(
&self,
initial: HandleId,
partial: bool,
) -> Result<NodeId, RegisterError>
fn register_state( &self, initial: HandleId, partial: bool, ) -> Result<NodeId, RegisterError>
See Core::register_state.
Sourcefn register_producer(&self, fn_id: FnId) -> Result<NodeId, RegisterError>
fn register_producer(&self, fn_id: FnId) -> Result<NodeId, RegisterError>
Sourcefn subscribe(&self, node_id: NodeId, sink: Sink) -> SubscriptionId
fn subscribe(&self, node_id: NodeId, sink: Sink) -> SubscriptionId
See Core::subscribe.
Sourcefn try_subscribe(
&self,
node_id: NodeId,
sink: Sink,
) -> Result<SubscriptionId, SubscribeError>
fn try_subscribe( &self, node_id: NodeId, sink: Sink, ) -> Result<SubscriptionId, SubscribeError>
See Core::try_subscribe.
Sourcefn unsubscribe(&self, node_id: NodeId, sub_id: SubscriptionId)
fn unsubscribe(&self, node_id: NodeId, sub_id: SubscriptionId)
See Core::unsubscribe.
Sourcefn emit(&self, node_id: NodeId, handle: HandleId)
fn emit(&self, node_id: NodeId, handle: HandleId)
See Core::emit.
Sourcefn complete(&self, node_id: NodeId)
fn complete(&self, node_id: NodeId)
See Core::complete.
Sourcefn error(&self, node_id: NodeId, handle: HandleId)
fn error(&self, node_id: NodeId, handle: HandleId)
See Core::error.
Sourcefn teardown(&self, node_id: NodeId)
fn teardown(&self, node_id: NodeId)
See Core::teardown. Sink-side terminal forwards (e.g.
stratify TEARDOWN passthrough) route through em.defer — rare,
so Defer rather than a 5th MailboxOp fast-path variant.
Sourcefn invalidate(&self, node_id: NodeId)
fn invalidate(&self, node_id: NodeId)
See Core::invalidate. Sink-side INVALIDATE forwards
(higher-order build_inner_sink) route through em.defer.
Sourcefn cache_of(&self, node_id: NodeId) -> HandleId
fn cache_of(&self, node_id: NodeId) -> HandleId
See Core::cache_of.
Sourcefn has_fired_once(&self, node_id: NodeId) -> bool
fn has_fired_once(&self, node_id: NodeId) -> bool
See Core::has_fired_once.
Sourcefn is_terminal(&self, node_id: NodeId) -> Option<TerminalKind>
fn is_terminal(&self, node_id: NodeId) -> Option<TerminalKind>
See Core::is_terminal.
Sourcefn is_dirty(&self, node_id: NodeId) -> bool
fn is_dirty(&self, node_id: NodeId) -> bool
See Core::is_dirty.
Sourcefn serialize_handle(&self, handle: HandleId) -> Option<Value>
fn serialize_handle(&self, handle: HandleId) -> Option<Value>
Serialize a node’s cached HandleId via the binding (S2b/β
D244). Delegates to binding_ptr().serialize_handle — needed so
an in-wave MailboxOp::Defer closure (storage snapshot-on-
observe) can run graphrefly_graph snapshot through &dyn CoreFull. Pure binding-delegating read; no C/T surfaced.
Sourcefn mailbox(&self) -> Arc<CoreMailbox> ⓘ
fn mailbox(&self) -> Arc<CoreMailbox> ⓘ
The wave-drained [CoreMailbox] (D246 rule 5: the one facade is
mutation + inspection + serialize + mailbox). Lets a holder
of &dyn CoreFull post deferred ops without naming the cell
type — folds D245’s per-binding “how do I reach the mailbox”.
Sourcefn defer_queue(&self) -> Rc<DeferQueue>
fn defer_queue(&self) -> Rc<DeferQueue>
The owner-side crate::mailbox::DeferQueue (D249/S2c — the
!Send Defer split off CoreMailbox). Lets a holder of
&dyn CoreFull post owner-side deferred closures (ProducerCtx
build path) without naming the cell type.
Sourcefn binding(&self) -> Arc<dyn BindingBoundary> ⓘ
fn binding(&self) -> Arc<dyn BindingBoundary> ⓘ
See Core::binding.
Sourcefn emit_or_defer(&self, node_id: NodeId, new_handle: HandleId)
fn emit_or_defer(&self, node_id: NodeId, new_handle: HandleId)
See Core::emit_or_defer.
Sourcefn complete_or_defer(&self, node_id: NodeId)
fn complete_or_defer(&self, node_id: NodeId)
Sourcefn error_or_defer(&self, node_id: NodeId, error_handle: HandleId)
fn error_or_defer(&self, node_id: NodeId, error_handle: HandleId)
See Core::error_or_defer.