Skip to main content

Module write

Module write 

Source
Expand description

The write facade (issue #36): the only two ways an explorer writes to the bus — a declared publication, and a disciplined RPC call.

Reading stayed the engine’s whole job until now; both frontends need the same two write paths (zenctl topic pub / service call, the zengui publish/call pane), and the discipline they must share is exactly the kind that fails silently when duplicated:

  • P7: telemetry/state publishers are declared, never one-shot ad-hoc puts — so Publication wraps a declared publisher, and there is no bare-put helper here at all;
  • QoS is the closed enum (RFC 04 §3), mapped to the wire in one place, including the v1.5 express axis (alert/frame) that nothing set before;
  • fan-out refusal is layered (RFC 05 §2.1): generated builders make a forbidden-fanout write unspellable; this facade adds the registry layer for dynamic callers — a *-origin call to a procedure whose slice declares fanout = "forbidden" is refused before any GET leaves.

Structs§

MatchingEvents
A stream of matching changes for one self-declared entity (a Publication or a crate::RepeatingQuery). These are the only two places a matching claim can be made from — a foreign publisher’s consumers are not observable without publishing on their key, and that half stays deferred (RFC 12 §9; #38/#80 adoption note).
Publication
A declared publisher with its QoS profile applied — the only publish path.

Enums§

CallTarget
Who a call is addressed to. Typed — a fleet call is a deliberate variant, never a string that happens to contain * (RFC 08 §1.1’s origin-argument rule for dynamic callers).
RetireClass
What a key is, for the purpose of retiring it — the guard’s positive verdict, so callers print facts instead of re-deriving them.

Functions§

call
Call a procedure and report every attributed answer.
check_retire
Refuse a tombstone the class semantics do not license, unless forced.
declare_publication
Declare a publication on a full wire key (explorers are un-namespaced; compose with with_base first).