laser_wire/topics.rs
1// Ops stream + topics. The control surface rides a dedicated `_agdx` ops
2// stream, separate from the customer data stream. Topic names drop the `agdx.`
3// prefix because the `_agdx` stream already namespaces them. A pinned wire
4// contract: drift breaks the managed control surface silently. `_agdx/dlq`
5// collects dead-letter capsules, each JSON capsule tagged with a `kind`
6// discriminator.
7
8/// The ops stream name (`_agdx`).
9pub const OPS_STREAM: &str = "_agdx";
10/// Ops topic: projection control commands.
11pub const CONTROL_TOPIC: &str = "control.commands";
12/// Ops topic: the universal dead-letter topic (capsules carry a `kind`).
13pub const DLQ_TOPIC: &str = "dlq";
14/// The change-feed topic on the ops stream: one [`ChangeRecord`] per committed
15/// projector batch for a binding that opted into `notify`. This is a pinned
16/// Iggy-binding constant like its two sibling topics.
17///
18/// [`ChangeRecord`]: crate::change::ChangeRecord
19pub const CHANGES_TOPIC: &str = "changes";