zenkey_fleet/bus.rs
1//! **Layer 1 — the bus.** Everything that holds a session and talks to Zenoh.
2//!
3//! One rule places a module here: *it needs a live session to do its job*.
4//! Every function below either takes a [`crate::Fleet`] (base-aware) or a
5//! bare `&Session` (base-less, and saying so), and everything it returns is
6//! an observation — never a judgement about one. A module that can compute
7//! its answer from values already in hand belongs in [`crate::model`]; a
8//! module that turns an observation into a verdict belongs in
9//! [`crate::judge`].
10//!
11//! The RFC 05 §2.1 fan-in discipline lives here exactly once, in
12//! [`query::fleet_get`] — target `All`, consolidation `None`, attribution by
13//! the reply's own key. Everything in this layer that asks the fleet a
14//! question goes through it rather than reaching for `session.get`, which is
15//! what makes "silence is never a verdict" a property of the crate instead of
16//! a habit of its authors.
17//!
18//! Sessions opened here are deliberately **un-namespaced** (RFC 09 §5): an
19//! explorer sees the wire as it really is, full keys included — that is what
20//! lets it spot a leak. Do not "fix" this by setting a namespace.
21
22pub mod admin;
23pub mod blob;
24pub mod discover;
25pub mod monitor;
26pub mod producer;
27pub mod query;
28pub mod roster;
29pub mod scout;
30pub mod seed;
31pub mod serve;
32pub mod session;
33pub(crate) mod teardown;
34pub mod write;
35
36#[cfg(feature = "decode")]
37pub mod body;