Skip to main content

cobble_data_structure/
lib.rs

1//! Structured wrapper crate on top of `cobble`.
2//!
3//! This crate mirrors Cobble's main usage flows, but with typed structured
4//! columns (`Bytes` / `List`) and typed decode/encode wrappers.
5//!
6//! # 1) Single-machine embedded (`StructuredSingleDb`)
7//!
8//! ```rust,ignore
9//! use cobble::{Config, VolumeDescriptor};
10//! use cobble_data_structure::{ListConfig, ListRetainMode, StructuredSingleDb};
11//!
12//! let mut config = Config::default();
13//! config.num_columns = 2;
14//! config.total_buckets = 1;
15//! config.volumes = VolumeDescriptor::single_volume("file:///tmp/cobble-ssingle".to_string());
16//!
17//! let mut db = StructuredSingleDb::open(config)?;
18//! db.update_schema().add_list_column(
19//!     1,
20//!     ListConfig {
21//!         max_elements: Some(100),
22//!         retain_mode: ListRetainMode::Last,
23//!         preserve_element_ttl: false,
24//!     },
25//! ).commit()?;
26//! db.put(0, b"k1", 0, b"v1".to_vec())?;
27//! let snapshot_id = db.snapshot()?;
28//! let snapshots = db.list_snapshots()?;
29//! # let _ = (snapshot_id, snapshots);
30//! # Ok::<(), cobble::Error>(())
31//! ```
32//!
33//! # 2) Distributed write path wrappers
34//!
35//! Use `StructuredDb` on shard writers and keep coordinator/global snapshot flow
36//! identical to `cobble::Db` + `cobble::DbCoordinator`.
37//!
38//! # 3) Snapshot-following reading wrappers (`StructuredReader`)
39//!
40//! `StructuredReader` follows global snapshots like `cobble::Reader`, but returns
41//! typed structured rows.
42//!
43//! # 4) Distributed scan wrappers
44//!
45//! Use `StructuredScanPlan` / `StructuredScanSplit` / `StructuredScanSplitScanner`
46//! for snapshot-based distributed scan with structured row decoding.
47//!
48//! # 5) Fixed snapshot read wrappers
49//!
50//! Use `StructuredReadOnlyDb` for pinned-snapshot reads with structured decoding.
51//!
52#![crate_type = "lib"]
53
54mod list;
55mod structured_db;
56mod structured_read_only_db;
57mod structured_reader;
58mod structured_remote_compaction_server;
59mod structured_scan;
60mod structured_single_db;
61
62pub use list::{ListConfig, ListRetainMode};
63pub use structured_db::{
64    DataStructureDb, StructuredColumnType, StructuredColumnValue, StructuredDb,
65    StructuredDbIterator, StructuredSchema, StructuredSchemaBuilder, StructuredWriteBatch,
66    structured_merge_operator_resolver, structured_resolvable_operator_ids,
67};
68pub use structured_read_only_db::StructuredReadOnlyDb;
69pub use structured_reader::StructuredReader;
70pub use structured_remote_compaction_server::StructuredRemoteCompactionServer;
71pub use structured_scan::{StructuredScanPlan, StructuredScanSplit, StructuredScanSplitScanner};
72pub use structured_single_db::StructuredSingleDb;