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 = 1;
14//! config.total_buckets = 1;
15//! config.volumes = VolumeDescriptor::single_volume("file:///tmp/cobble-ssingle");
16//!
17//! let mut db = StructuredSingleDb::open(config)?;
18//! db.update_schema().add_list_column(
19//!     None,
20//!     1,
21//!     ListConfig {
22//!         max_elements: Some(100),
23//!         retain_mode: ListRetainMode::Last,
24//!         preserve_element_ttl: false,
25//!     },
26//! ).commit()?;
27//! db.put(0, b"k1", 0, b"v1".to_vec())?;
28//! let snapshot_id = db.snapshot()?;
29//! let snapshots = db.list_snapshots()?;
30//! # let _ = (snapshot_id, snapshots);
31//! # Ok::<(), cobble::Error>(())
32//! ```
33//!
34//! # 2) Distributed write path wrappers
35//!
36//! Use `StructuredDb` on shard writers and keep coordinator/global snapshot flow
37//! identical to `cobble::Db` + `cobble::DbCoordinator`.
38//!
39//! # 3) Snapshot-following reading wrappers (`StructuredReader`)
40//!
41//! `StructuredReader` follows global snapshots like `cobble::Reader`, but returns
42//! typed structured rows.
43//!
44//! # 4) Distributed scan wrappers
45//!
46//! Use `StructuredScanPlan` / `StructuredScanSplit` / `StructuredScanSplitScanner`
47//! for snapshot-based distributed scan with structured row decoding.
48//!
49//! # 5) Fixed snapshot read wrappers
50//!
51//! Use `StructuredReadOnlyDb` for pinned-snapshot reads with structured decoding.
52//!
53#![crate_type = "lib"]
54
55#[cfg(feature = "ffi")]
56#[doc(hidden)]
57pub mod ffi;
58mod list;
59mod priority_queue;
60mod structured_db;
61mod structured_read_only_db;
62mod structured_reader;
63mod structured_remote_compaction_server;
64mod structured_scan;
65mod structured_single_db;
66
67pub use list::{ListConfig, ListRetainMode};
68pub use priority_queue::PriorityQueue;
69pub use structured_db::{
70    DataStructureDb, StructuredColumnFamilySchema, StructuredColumnType, StructuredColumnValue,
71    StructuredDb, StructuredDbBuilder, StructuredDbIterator, StructuredReadOptions,
72    StructuredScanOptions, StructuredSchema, StructuredSchemaBuilder, StructuredWriteBatch,
73    StructuredWriteOptions, structured_merge_operator_resolver, structured_resolvable_operator_ids,
74};
75pub use structured_read_only_db::{StructuredReadOnlyDb, StructuredReadOnlyDbBuilder};
76pub use structured_reader::{StructuredReader, StructuredReaderBuilder};
77pub use structured_remote_compaction_server::StructuredRemoteCompactionServer;
78pub use structured_scan::{StructuredScanPlan, StructuredScanSplit, StructuredScanSplitScanner};
79pub use structured_single_db::StructuredSingleDb;