···49glob = "0.3"
50ordermap = { version = "1.1.0", features = ["serde"] }
51arc-swap = "1.8.2"
000
···49glob = "0.3"
50ordermap = { version = "1.1.0", features = ["serde"] }
51arc-swap = "1.8.2"
52+53+[dev-dependencies]
54+tempfile = "3.26.0"
+1-4
src/crawler/mod.rs
···140 for repo in output.repos {
141 let did_key = keys::repo_key(&repo.did);
142143- let excl_key = crate::db::filter::filter_key(
144- crate::db::filter::EXCLUDE_PREFIX,
145- repo.did.as_str(),
146- );
147 if db.filter.contains_key(&excl_key).into_diagnostic()? {
148 continue;
149 }
···140 for repo in output.repos {
141 let did_key = keys::repo_key(&repo.did);
142143+ let excl_key = crate::db::filter::exclude_key(repo.did.as_str())?;
000144 if db.filter.contains_key(&excl_key).into_diagnostic()? {
145 continue;
146 }
+104-6
src/db/filter.rs
···1use fjall::{Keyspace, OwnedWriteBatch};
2use miette::{IntoDiagnostic, Result};
304use crate::filter::{FilterConfig, FilterMode, SetUpdate};
056pub const MODE_KEY: &[u8] = b"m";
7pub const SIGNAL_PREFIX: u8 = b's';
···9pub const EXCLUDE_PREFIX: u8 = b'x';
10pub const SEP: u8 = b'|';
1112-pub fn filter_key(prefix: u8, val: &str) -> Vec<u8> {
13 let mut key = Vec::with_capacity(2 + val.len());
14- key.push(prefix);
15 key.push(SEP);
16 key.extend_from_slice(val.as_bytes());
17- key
00000000000000000018}
1920pub fn apply_patch(
···44) -> Result<()> {
45 let Some(update) = update else { return Ok(()) };
46000000047 match update {
48 SetUpdate::Set(values) => {
49 let scan_prefix = [prefix, SEP];
···52 batch.remove(ks, k);
53 }
54 for val in values {
55- batch.insert(ks, filter_key(prefix, &val), []);
56 }
57 }
58 SetUpdate::Patch(map) => {
59 for (val, add) in map {
60- let key = filter_key(prefix, &val);
61 if add {
62 batch.insert(ks, key, []);
63 } else {
···102 let mut out = Vec::new();
103 for guard in ks.prefix(scan_prefix) {
104 let (k, _) = guard.into_inner().into_diagnostic()?;
105- let val = std::str::from_utf8(&k[2..]).into_diagnostic()?.to_owned();
00000106 out.push(val);
107 }
108 Ok(out)
109}
000000000000000000000000000000000000000000000000000000000000000000