1#![doc(
36 html_logo_url = "https://raw.githubusercontent.com/structured-world/coordinode-lsm-tree/main/logo.png"
37)]
38#![doc(
39 html_favicon_url = "https://raw.githubusercontent.com/structured-world/coordinode-lsm-tree/main/logo.png"
40)]
41#![deny(clippy::all, missing_docs, clippy::cargo)]
42#![deny(clippy::unwrap_used)]
43#![deny(clippy::indexing_slicing)]
44#![warn(clippy::pedantic, clippy::nursery)]
45#![warn(clippy::expect_used)]
46#![allow(clippy::missing_const_for_fn)]
47#![warn(clippy::multiple_crate_versions)]
48#![allow(clippy::option_if_let_else)]
49#![warn(clippy::redundant_feature_names)]
50#![cfg_attr(coverage_nightly, feature(coverage_attribute))]
51
52#[doc(hidden)]
53pub type HashMap<K, V> = std::collections::HashMap<K, V, rustc_hash::FxBuildHasher>;
54
55pub(crate) type HashSet<K> = std::collections::HashSet<K, rustc_hash::FxBuildHasher>;
56
57macro_rules! fail_iter {
58 ($e:expr) => {
59 match $e {
60 Ok(v) => v,
61 Err(e) => return Some(Err(e.into())),
62 }
63 };
64}
65
66macro_rules! unwrap {
67 ($x:expr) => {{
68 $x.expect("should read")
69 }};
70}
71
72mod any_tree;
73
74mod abstract_tree;
75
76#[doc(hidden)]
77pub mod blob_tree;
78
79mod comparator;
80
81#[doc(hidden)]
82mod cache;
83
84#[doc(hidden)]
85pub mod checksum;
86
87#[doc(hidden)]
88pub mod coding;
89
90pub mod compaction;
91mod compression;
92
93pub mod encryption;
95
96pub mod config;
98
99#[doc(hidden)]
100pub mod descriptor_table;
101
102#[doc(hidden)]
103pub mod file_accessor;
104
105mod double_ended_peekable;
106mod error;
107
108#[doc(hidden)]
109pub mod file;
110
111pub mod fs;
113
114mod hash;
115mod heap;
116mod ingestion;
117mod iter_guard;
118mod key;
119mod key_range;
120mod manifest;
121mod memtable;
122mod merge_operator;
123mod run_reader;
124mod run_scanner;
125
126#[doc(hidden)]
127pub mod merge;
128
129#[cfg(feature = "metrics")]
130pub(crate) mod metrics;
131
132#[doc(hidden)]
135pub mod mvcc_stream;
136
137mod path;
138mod prefix;
139
140#[doc(hidden)]
141pub mod range;
142
143pub(crate) mod active_tombstone_set;
144pub(crate) mod range_tombstone;
145pub(crate) mod range_tombstone_filter;
146
147#[doc(hidden)]
148pub mod table;
149
150mod seqno;
151mod slice;
152mod slice_windows;
153
154#[doc(hidden)]
155pub mod stop_signal;
156
157mod format_version;
158mod time;
159mod tree;
160
161pub mod util;
163
164mod value;
165mod value_type;
166
167pub mod verify;
169
170mod version;
171mod vlog;
172
173pub type UserKey = Slice;
175
176pub type UserValue = Slice;
178
179pub type KvPair = (UserKey, UserValue);
181
182#[doc(hidden)]
183pub use {
184 blob_tree::{handle::BlobIndirection, Guard as BlobGuard},
185 checksum::Checksum,
186 iter_guard::IterGuardImpl,
187 key_range::KeyRange,
188 merge::BoxedIterator,
189 slice::Builder,
190 table::{GlobalTableId, Table, TableId},
191 tree::inner::TreeId,
192 tree::Guard as StandardGuard,
193 value::InternalValue,
194};
195
196pub use encryption::EncryptionProvider;
197
198#[cfg(feature = "encryption")]
199pub use encryption::Aes256GcmProvider;
200
201pub use {
202 abstract_tree::AbstractTree,
203 any_tree::AnyTree,
204 blob_tree::BlobTree,
205 cache::Cache,
206 comparator::{DefaultUserComparator, SharedComparator, UserComparator},
207 compression::CompressionType,
208 config::{Config, KvSeparationOptions, TreeType},
209 descriptor_table::DescriptorTable,
210 error::{Error, Result},
211 format_version::FormatVersion,
212 ingestion::AnyIngestion,
213 iter_guard::IterGuard as Guard,
214 memtable::{Memtable, MemtableId},
215 merge_operator::MergeOperator,
216 prefix::PrefixExtractor,
217 seqno::{
218 SequenceNumberCounter, SequenceNumberGenerator, SharedSequenceNumberGenerator, MAX_SEQNO,
219 },
220 slice::Slice,
221 tree::Tree,
222 value::SeqNo,
223 value_type::ValueType,
224 vlog::BlobFile,
225};
226
227#[cfg(feature = "zstd")]
228pub use compression::ZstdDictionary;
229
230#[cfg(feature = "metrics")]
231pub use metrics::Metrics;
232
233#[doc(hidden)]
234#[must_use]
235#[allow(missing_docs, clippy::missing_errors_doc, clippy::unwrap_used)]
236pub fn get_tmp_folder() -> tempfile::TempDir {
237 if let Ok(p) = std::env::var("LSMT_TMP_FOLDER") {
238 tempfile::tempdir_in(p)
239 } else {
240 tempfile::tempdir()
241 }
242 .unwrap()
243}