lsm_tree/config/
compression.rs1use crate::CompressionType;
6#[cfg(not(feature = "std"))]
7use alloc::vec::Vec;
8
9#[derive(Debug, Clone, Eq, PartialEq)]
11pub struct CompressionPolicy(Vec<CompressionType>);
12
13impl core::ops::Deref for CompressionPolicy {
14 type Target = [CompressionType];
15
16 fn deref(&self) -> &Self::Target {
17 &self.0
18 }
19}
20
21impl CompressionPolicy {
22 pub(crate) fn get(&self, level: usize) -> CompressionType {
23 #[expect(clippy::expect_used, reason = "policy is expected not to be empty")]
24 self.0
25 .get(level)
26 .copied()
27 .unwrap_or_else(|| self.last().copied().expect("policy should not be empty"))
28 }
29
30 #[must_use]
32 pub fn disabled() -> Self {
33 Self::all(CompressionType::None)
34 }
35
36 #[must_use]
38 pub fn all(c: CompressionType) -> Self {
39 Self(vec![c])
40 }
41
42 #[must_use]
48 pub fn new(policy: impl Into<Vec<CompressionType>>) -> Self {
49 let policy = policy.into();
50 assert!(!policy.is_empty(), "compression policy may not be empty");
51 assert!(policy.len() <= 255, "compression policy is too large");
52 Self(policy)
53 }
54}