0c6e5b3ace
The gateway emits a ReplayGap sentinel MxEvent at the head of a StreamEvents stream resumed via after_worker_sequence when the requested cursor predates the oldest retained event. Clients previously ignored it, silently mis-treating a lossy resume as continuous. Each client now surfaces the sentinel as a distinct, typed, non-terminal signal (never synthesized, never swallowed) so a consumer can detect the gap and re-snapshot; resume contract is after_worker_sequence = oldest_available_sequence - 1. - .NET: MxEventStreamItem (IsReplayGap/ReplayGap/Event) via new StreamEventItemsAsync + AsStreamItemsAsync extension. Build clean, 87 passed. - Go: EventResult.ReplayGap field + IsReplayGap(); ReplayGap type alias. build/vet/test clean. - Rust: EventItem enum (Event/ReplayGap); EventStream now yields Result<EventItem, Error>; CLI renders REPLAY_GAP line / replayGap JSON. fmt/check/test/clippy clean. - Python: ReplayGap dataclass; stream_events yields pb.MxEvent | ReplayGap. 131 passed. - Shared docs: ClientLibrariesDesign non-goals reframed (reconnect-replay protocol is consumable; auto-reconnect stays a non-goal); CrossLanguageSmokeMatrix resume-gap note. Java client is deferred to the windev batch (no local JRE); CLI-15 stays open until it lands. Claude-Session: https://claude.ai/code/session_01DMXXvNuPekkkrTEyPNxEkW
42 lines
1.3 KiB
Rust
42 lines
1.3 KiB
Rust
//! Rust client for the MXAccess Gateway.
|
|
//!
|
|
//! The crate compiles generated `tonic` bindings from the shared gateway
|
|
//! protobuf contracts and exposes a small handwritten surface — connection
|
|
//! options, an authentication interceptor, gateway and Galaxy Repository
|
|
//! clients, an `MxValue` builder/projection, and protocol-error types — that
|
|
//! application code can use without touching the generated modules directly.
|
|
//!
|
|
//! See the project root `RustClientDesign.md` for the design rationale and
|
|
//! the cross-language client matrix.
|
|
|
|
#![warn(missing_docs)]
|
|
|
|
pub mod auth;
|
|
pub mod client;
|
|
pub mod error;
|
|
pub mod galaxy;
|
|
pub mod generated;
|
|
pub mod options;
|
|
pub mod session;
|
|
pub mod value;
|
|
pub mod version;
|
|
|
|
#[doc(inline)]
|
|
pub use auth::{ApiKey, AuthInterceptor};
|
|
#[doc(inline)]
|
|
pub use client::{AlarmFeedStream, EventItem, EventStream, GatewayClient};
|
|
#[doc(inline)]
|
|
pub use error::{CommandError, Error, MxAccessError};
|
|
#[doc(inline)]
|
|
pub use galaxy::{DeployEventStream, GalaxyClient};
|
|
#[doc(inline)]
|
|
pub use generated::mxaccess_gateway::v1::ReplayGap;
|
|
#[doc(inline)]
|
|
pub use options::ClientOptions;
|
|
#[doc(inline)]
|
|
pub use session::{next_correlation_id, Session};
|
|
#[doc(inline)]
|
|
pub use value::{MxArrayProjection, MxArrayValue, MxStatus, MxValue, MxValueProjection};
|
|
#[doc(inline)]
|
|
pub use version::{CLIENT_VERSION, GATEWAY_PROTOCOL_VERSION, WORKER_PROTOCOL_VERSION};
|