1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
use crate::;
/// Bundles the pluggable strategy types for a [`Storage`] instance into a
/// single type parameter.
///
/// Every storage silo is generic over one `StorageStrategy`, which determines:
/// - How keys are split, compared, and ordered ([`Comparer`])
/// - Which key-value entries are visible to readers ([`Filter`])
///
/// Keeping these together as associated types means callsites only ever carry
/// one type parameter rather than one per strategy, and adding new strategy
/// axes in the future (e.g. a compaction policy) is a non-breaking change -
/// just a new associated type with a default.
///
/// The KV layer has no knowledge of what the strategy types encode. All
/// semantics - HLC timestamps, TTL expiry, MVCC watermarks - are owned by
/// the implementor. For plain KV usage with no engine semantics, use
/// [`DefaultStrategy`].
/// A [`StorageStrategy`] for plain key-value usage with no engine semantics.
///
/// Uses [`DefaultComparer`], which treats the entire key as the prefix with
/// no suffix, and `()` as the [`Filter`], which keeps every entry visible.
/// Compiles down to zero overhead - all strategy abstractions are eliminated
/// by the compiler.
///
/// Useful for tests and for embedders that want a simple LSM store without
/// MVCC, HLC timestamps, or any other engine-level concerns.
;