Skip to main content

scry_protocol/
lib.rs

1//! # Scry Protocol
2//!
3//! Event protocol for Scry SQL proxy. Provides types and serialization
4//! for query events captured by the proxy.
5//!
6//! ## Features
7//!
8//! - **Event Types**: `QueryEvent` and `QueryEventBuilder` for constructing events
9//! - **FlexBuffers Serialization**: Efficient, schema-less binary serialization
10//! - **FlexBuffers Deserialization**: Deserialize event batches from binary format
11//! - **Batch Support**: Serialize and deserialize multiple events in a single batch
12//!
13//! ## Wire Format
14//!
15//! Events are serialized using FlexBuffers, a schema-less binary format from the
16//! FlatBuffers project. This provides:
17//!
18//! - Compact binary representation
19//! - Backward/forward compatibility
20//! - Zero-copy deserialization capabilities
21//! - Works seamlessly with serde
22//!
23//! ## Example: Serialization
24//!
25//! ```rust
26//! use scry_protocol::{QueryEventBuilder, FlatBuffersSerializer};
27//! use std::time::Duration;
28//!
29//! let event = QueryEventBuilder::new("SELECT * FROM users")
30//!     .connection_id("conn-123")
31//!     .database("mydb")
32//!     .duration(Duration::from_millis(5))
33//!     .build();
34//!
35//! let batch = vec![event];
36//! let bytes = FlatBuffersSerializer::serialize_batch(&batch, "proxy-1", 0);
37//! ```
38//!
39//! ## Example: Deserialization
40//!
41//! ```rust
42//! use scry_protocol::FlexBuffersDeserializer;
43//!
44//! # let bytes: Vec<u8> = vec![]; // From serialized batch
45//! let result = FlexBuffersDeserializer::deserialize_batch(&bytes);
46//! match result {
47//!     Ok(batch) => {
48//!         println!("Proxy ID: {}", batch.proxy_id);
49//!         println!("Batch seq: {}", batch.batch_seq);
50//!         println!("Events: {}", batch.events.len());
51//!     }
52//!     Err(e) => eprintln!("Deserialization error: {}", e),
53//! }
54//! ```
55
56mod event;
57mod param;
58mod serializer;
59mod deserializer;
60pub mod database_event;
61
62pub use event::{QueryEvent, QueryEventBuilder};
63pub use param::ParamValue;
64pub use serializer::FlatBuffersSerializer;
65pub use deserializer::{FlexBuffersDeserializer, DeserializedBatch};
66
67// Re-export commonly used types for convenience
68pub use std::time::{Duration, SystemTime};