lsm_tree/config/
filter.rs1pub use crate::table::filter::BloomConstructionPolicy;
6
7#[derive(Copy, Debug, Clone, PartialEq)]
11pub enum FilterPolicyEntry {
12 None,
14
15 Bloom(BloomConstructionPolicy),
17}
18
19#[derive(Debug, Clone, PartialEq)]
21pub struct FilterPolicy(Vec<FilterPolicyEntry>);
22
23impl std::ops::Deref for FilterPolicy {
24 type Target = [FilterPolicyEntry];
25
26 fn deref(&self) -> &Self::Target {
27 &self.0
28 }
29}
30
31impl FilterPolicy {
32 pub(crate) fn get(&self, level: usize) -> FilterPolicyEntry {
33 self.0
34 .get(level)
35 .copied()
36 .unwrap_or_else(|| self.last().copied().expect("policy should not be empty"))
37 }
38
39 #[must_use]
43 pub fn disabled() -> Self {
44 Self::all(FilterPolicyEntry::None)
45 }
46
47 #[must_use]
49 pub fn all(c: FilterPolicyEntry) -> Self {
50 Self(vec![c])
51 }
52
53 #[must_use]
55 pub fn new(policy: &[FilterPolicyEntry]) -> Self {
56 assert!(!policy.is_empty(), "compression policy may not be empty");
57 assert!(policy.len() <= 255, "compression policy is too large");
58 Self(policy.into())
59 }
60}