use super::{DocId, StorageBackendResult, TokenTermKey};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum InvertedIndexChange<'a> {
Posting {
doc_id: DocId,
field: &'a str,
term: &'a TokenTermKey,
},
Document {
doc_id: DocId,
field: &'a str,
},
FieldStatistics {
field: &'a str,
},
}
pub type InvertedIndexChangeVisitor<'a> =
dyn FnMut(InvertedIndexChange<'_>) -> StorageBackendResult<()> + 'a;
pub fn visit_field_replacement(
visit: &mut InvertedIndexChangeVisitor<'_>,
doc_id: DocId,
field: &str,
previous_length: Option<u64>,
replacement_length: Option<u64>,
) -> StorageBackendResult<()> {
if previous_length.is_none() && replacement_length.is_none() {
return Ok(());
}
visit(InvertedIndexChange::Document { doc_id, field })?;
if previous_length != replacement_length {
visit(InvertedIndexChange::FieldStatistics { field })?;
}
Ok(())
}