crdt_store/lib.rs
1//! # crdt-store
2//!
3//! Persistence backends for [`crdt-kit`](https://docs.rs/crdt-kit).
4//!
5//! Provides a unified storage abstraction for persisting CRDT state and
6//! operation event logs across different backends: SQLite, redb, in-memory,
7//! and raw flash (for `no_std` IoT).
8//!
9//! ## Quick Start
10//!
11//! ```
12//! use crdt_store::{MemoryStore, StateStore};
13//!
14//! let mut store = MemoryStore::new();
15//! store.put("sensors", "sensor-42", b"hello").unwrap();
16//! let data = store.get("sensors", "sensor-42").unwrap();
17//! assert_eq!(data.as_deref(), Some(b"hello".as_slice()));
18//! ```
19//!
20//! ## Backends
21//!
22//! | Backend | Feature flag | Use case |
23//! |---------|-------------|----------|
24//! | [`MemoryStore`] | *(always available)* | Testing, prototyping |
25//! | `SqliteStore` | `sqlite` | Edge Linux, mobile, desktop |
26//! | `RedbStore` | `redb` | Pure-Rust edge without C deps |
27
28#![cfg_attr(not(feature = "std"), no_std)]
29
30extern crate alloc;
31
32mod db;
33mod memory;
34#[cfg(feature = "redb")]
35mod redb;
36#[cfg(feature = "sqlite")]
37mod sqlite;
38mod traits;
39
40pub use db::{deserialize_event, CrdtDb, CrdtDbBuilder, CrdtDbConfig, CrdtVersioned, DbError};
41pub use memory::MemoryStore;
42#[cfg(feature = "redb")]
43pub use redb::{RedbError, RedbStore};
44#[cfg(feature = "sqlite")]
45pub use sqlite::{JournalMode, SqliteConfig, SqliteError, SqliteStore};
46pub use traits::*;