Skip to main content

Module protocol

Module protocol 

Source
Expand description

The client<->daemon wire protocol (version 2)

Typed request/response enums + bus events. Framing lives in wire; every type here is snapshot-pinned — changing any serialized shape is a protocol version bump recorded in the CHANGELOG.

What version 2 added: the instance slot on ProcessInfo. A sheep that is one of several instances of an app reports which slot it is, so every listing can group an app’s instances and roll their numbers up rather than showing several rows that share a name and explain nothing. A sheep reports its own slot, counting from 0, so a single-instance app reports Some(0). None means the peer daemon predates the field, and a reader that finds it should render exactly what it rendered before this field existed.

Two sets of tests carry a version in their name and they assert opposite things. The *_wire_v2 snapshots pin the shape this crate serializes TODAY, so they follow PROTOCOL_VERSION and get renamed whenever it moves. The v1_*_fixture_still_deserializes tests pin a literal payload captured from a version 1 peer and assert it STILL decodes, so their name records where the bytes came from and never moves; renaming one would erase the compatibility claim it exists to make.

Re-exports§

pub use channel::CHANNEL_VERSION;
pub use channel::ChildMessage;
pub use channel::ShepherdMessage;
pub use events::BusEvent;
pub use events::ProcessEventKind;
pub use frame::ServerFrame;
pub use request::ActionOutcome;
pub use request::ActionReply;
pub use request::DogSectionToml;
pub use request::DogSource;
pub use request::Envelope;
pub use request::ExitInfo;
pub use request::Hello;
pub use request::HelloAck;
pub use request::HelloReply;
pub use request::Lamb;
pub use request::LineOutcome;
pub use request::LineReply;
pub use request::ProcessInfo;
pub use request::ProcessInfoBuilder;
pub use request::Reply;
pub use request::Request;
pub use request::Response;
pub use request::RpcError;
pub use request::RpcErrorCode;
pub use request::SelectorSpec;
pub use request::SheepDrift;
pub use request::SignalOutcome;
pub use request::SignalReply;
pub use request::Smit;
pub use request::SmitError;
pub use request::sort_flock;
pub use wire::MAX_FRAME_BYTES;
pub use wire::WireError;
pub use wire::codec;
pub use wire::decode_frame;
pub use wire::encode_frame;

Modules§

channel
The shepherd channel: the newline-JSON wire carried on fd 3 between the shepherd and each spawned child.
events
Bus events broadcast to subscribed clients
frame
Anything the daemon writes to a connected client
request
RPC frames: requests, responses, envelopes, and structured errors
wire
Frame encoding shared by daemon and client Frame encoding: u32 length prefix + JSON payload

Constants§

PROTOCOL_VERSION
Wire protocol version.