kimberlite_wire/lib.rs
1//! # kmb-wire: Binary wire protocol for `Kimberlite`
2//!
3//! This crate defines the binary wire protocol used for client-server
4//! communication in `Kimberlite`.
5//!
6//! ## Frame Format
7//!
8//! ```text
9//! ┌─────────┬─────────┬──────────┬──────────┬──────────────────┐
10//! │ Magic │ Version │ Length │ Checksum │ Payload │
11//! │ (4 B) │ (2 B) │ (4 B) │ (4 B) │ (var) │
12//! └─────────┴─────────┴──────────┴──────────┴──────────────────┘
13//! ```
14//!
15//! - **Magic**: `0x56444220` ("VDB ")
16//! - **Version**: Protocol version (currently 1)
17//! - **Length**: Payload length in bytes (max 16 MiB)
18//! - **Checksum**: CRC32 of payload
19//! - **Payload**: Bincode-encoded message
20//!
21//! ## Message Types
22//!
23//! Messages are either requests (client → server) or responses (server → client).
24//! Each request has a corresponding response type.
25
26mod error;
27mod frame;
28mod message;
29
30pub use error::{WireError, WireResult};
31pub use frame::{FRAME_HEADER_SIZE, Frame, FrameHeader, MAGIC, MAX_PAYLOAD_SIZE, PROTOCOL_VERSION};
32pub use message::{
33 AppendEventsRequest, AppendEventsResponse, CreateStreamRequest, CreateStreamResponse,
34 ErrorCode, ErrorResponse, HandshakeRequest, HandshakeResponse, QueryAtRequest, QueryAtResponse,
35 QueryParam, QueryRequest, QueryResponse, QueryValue, ReadEventsRequest, ReadEventsResponse,
36 Request, RequestId, RequestPayload, Response, ResponsePayload, SyncRequest, SyncResponse,
37};
38
39#[cfg(test)]
40mod tests;