diff options
| author | metamuffin <metamuffin@disroot.org> | 2026-02-05 20:31:55 +0100 |
|---|---|---|
| committer | metamuffin <metamuffin@disroot.org> | 2026-02-05 20:31:55 +0100 |
| commit | 65ca3f3450d0067668111f6e13cc3089768c9efe (patch) | |
| tree | 89dceed4f711d25ff2763e18a4be7e1a59e79507 /database/src/filter/binning.rs | |
| parent | 1af0468788c0a592a76398206e6c7479384853ec (diff) | |
| download | jellything-65ca3f3450d0067668111f6e13cc3089768c9efe.tar jellything-65ca3f3450d0067668111f6e13cc3089768c9efe.tar.bz2 jellything-65ca3f3450d0067668111f6e13cc3089768c9efe.tar.zst | |
remove read/write distinction for kv transactions; traitify database
Diffstat (limited to 'database/src/filter/binning.rs')
| -rw-r--r-- | database/src/filter/binning.rs | 52 |
1 files changed, 0 insertions, 52 deletions
diff --git a/database/src/filter/binning.rs b/database/src/filter/binning.rs deleted file mode 100644 index 3265e1a..0000000 --- a/database/src/filter/binning.rs +++ /dev/null @@ -1,52 +0,0 @@ -/* - This file is part of jellything (https://codeberg.org/metamuffin/jellything) - which is licensed under the GNU Affero General Public License (version 3); see /COPYING. - Copyright (C) 2026 metamuffin <metamuffin.org> -*/ - -use jellyobject::{Object, Path}; - -/// Sorted list of components to bin objects by filterable values. -#[derive(Debug, Clone, PartialEq, Eq, Hash)] -pub struct Binning(Vec<BinningComponent>); - -#[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)] -pub enum BinningComponent { - Has(Path), - Match(Path), -} - -impl Binning { - pub fn new(mut comps: Vec<BinningComponent>) -> Self { - comps.sort(); - Self(comps) - } - pub fn apply(&self, ob: Object<'_>, keys: &mut Vec<Vec<u8>>) { - for f in &self.0 { - f.apply(ob, keys); - } - } -} -impl BinningComponent { - pub fn apply(&self, ob: Object<'_>, keys: &mut Vec<Vec<u8>>) { - match self { - BinningComponent::Has(path) => { - let has = path.get_matching_value(ob).is_some(); - for co in keys { - co.push(has as u8) - } - } - BinningComponent::Match(path) => { - let mut new_out = Vec::new(); - for value in path.get_matching_values(ob) { - for mut co in keys.clone() { - co.extend((co.len() as u32).to_be_bytes()); - co.extend(value); - new_out.push(co); - } - } - *keys = new_out; - } - } - } -} |