Skip to main content

kimberlite_client/
lib.rs

1//! # kmb-client: RPC client for `Kimberlite`
2//!
3//! This crate provides a synchronous RPC client for communicating with
4//! a `Kimberlite` server using the binary wire protocol defined in `kmb-wire`.
5//!
6//! ## Usage
7//!
8//! ```ignore
9//! use kimberlite_client::{Client, ClientConfig};
10//! use kimberlite_types::{DataClass, TenantId};
11//!
12//! // Connect to server
13//! let mut client = Client::connect(
14//!     "127.0.0.1:5432",
15//!     TenantId::new(1),
16//!     ClientConfig::default(),
17//! )?;
18//!
19//! // Create a stream
20//! let stream_id = client.create_stream("events", DataClass::NonPHI)?;
21//!
22//! // Append events
23//! let offset = client.append(stream_id, vec![
24//!     b"event1".to_vec(),
25//!     b"event2".to_vec(),
26//! ])?;
27//!
28//! // Read events back
29//! let events = client.read_events(stream_id, kimberlite_types::Offset::new(0), 1024)?;
30//!
31//! // Execute a query
32//! let result = client.query("SELECT * FROM streams", &[])?;
33//! ```
34//!
35//! ## Configuration
36//!
37//! The client can be configured with timeouts and buffer sizes:
38//!
39//! ```ignore
40//! use kimberlite_client::ClientConfig;
41//! use std::time::Duration;
42//!
43//! let config = ClientConfig {
44//!     read_timeout: Some(Duration::from_secs(60)),
45//!     write_timeout: Some(Duration::from_secs(30)),
46//!     buffer_size: 128 * 1024,
47//!     auth_token: Some("secret-token".to_string()),
48//! };
49//! ```
50
51mod client;
52mod error;
53
54pub use client::{Client, ClientConfig};
55pub use error::{ClientError, ClientResult};
56
57// Re-export useful types from dependencies
58pub use kimberlite_wire::{QueryParam, QueryResponse, QueryValue, ReadEventsResponse};