Skip to main content

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;