swactor/crates/datastream/src/lib.rs

70 lines
2.8 KiB
Rust
Raw Normal View History

//! The per-node telemetry **datastream** (see `DATASTREAM_SPEC.md`).
//!
2026-07-18 09:38:16 +00:00
//! A deliberately dumb pipe: producers dump bytes tagged by stream-local
//! channel id, a single per-node mux accepts those bytes and assigns canonical
//! positions during drain, the endpoint broadcasts catalog-aware events to
//! subscribers, ingest reconstructs streams by position, and views are
//! read-time projections over stored frames. Nothing between a producer and a
//! view interprets the payload.
//!
//! ```text
//! producers (caller-owned records + text)
2026-07-18 09:38:16 +00:00
//! │ bytes tagged by registered ChannelId
//! ▼
2026-07-18 09:38:16 +00:00
//! endpoint / catalog → [`endpoint`]
//! │ channel metadata + producer handles
//! ▼
2026-07-18 09:38:16 +00:00
//! per-node MUX → [`mux::Mux`]
//! │ positioned [`frame::Frame`]s
//! ▼
2026-07-18 09:38:16 +00:00
//! endpoint fanout → [`endpoint::DeliveryFanout`]
//! │ catalog-aware events, maybe dropped per subscriber
//! ▼
2026-07-18 09:38:16 +00:00
//! ingest / store → [`ingest`], [`store`]
//! │ position-keyed frame truth
//! ▼
2026-07-18 09:38:16 +00:00
//! views → [`views`]
//! ```
//!
2026-07-18 09:38:16 +00:00
//! The data model ([`frame`]), extension contract ([`record`]), endpoint/fanout
//! seam ([`endpoint`]), and compatibility wire helpers ([`wire`]) are the seams
//! tests observe. Channel meanings live in producer/consumer crates, not in a
//! datastream-wide global registry.
pub mod emit;
pub mod endpoint;
pub mod frame;
pub mod hardware;
pub mod health;
pub mod ingest;
pub mod mux;
pub mod publisher_actor;
pub mod record;
pub mod sink_actor;
pub mod store;
pub mod transport;
pub mod views;
pub mod wire;
pub use endpoint::{
CatalogSnapshot, ChannelRegistrationError, DatastreamEndpoint, DatastreamProducer,
DatastreamSnapshot, DatastreamSubscription, DeliveryFanout, EndpointTick, SubscriberSnapshot,
SubscriptionId, frame_event_to_delivery,
};
pub use frame::{
ChannelContent, ChannelContentKind, ChannelDescriptor, ChannelFilter, ChannelId, ChannelRef,
DatastreamEvent, Frame, FrameDelivery, Lifetime, NodeId, Position, SourceFilter,
StreamDescriptor, StreamId, StreamOrigin, SubscriptionRequest,
};
pub use ingest::Consumer;
pub use mux::Mux;
pub use publisher_actor::{
DATASTREAM_PUBLISHER_NAME, DatastreamPublisherActor, DatastreamPublisherMsg,
DatastreamSubscribe, register_datastream_publisher_codec,
};
pub use record::{ChannelKind, ChannelRegistry, Record};
pub use sink_actor::{DATASTREAM_SINK_NAME, DatastreamSink};
pub use store::{GapSpan, Store, StoredStream};
pub use transport::{Delivery, Reorder, ScriptedTransport, StreamScript};
pub use views::{Body, LogEntry, MergedFrame};