use heed::{ types::{SerdeJson, Str}, RoTxn, RwTxn, }; use serde::{Deserialize, Serialize}; use crate::{index::main_key, Index}; #[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Default)] #[serde(rename_all = "camelCase")] pub struct DisabledTyposTerms { pub disable_on_numbers: bool, } impl Index { pub fn disabled_typos_terms(&self, txn: &RoTxn<'_>) -> heed::Result { self.main .remap_types::>() .get(txn, main_key::DISABLED_TYPOS_TERMS) .map(|option| option.unwrap_or_default()) } pub(crate) fn put_disabled_typos_terms( &self, txn: &mut RwTxn<'_>, disabled_typos_terms: &DisabledTyposTerms, ) -> heed::Result<()> { self.main.remap_types::>().put( txn, main_key::DISABLED_TYPOS_TERMS, disabled_typos_terms, )?; Ok(()) } pub(crate) fn delete_disabled_typos_terms(&self, txn: &mut RwTxn<'_>) -> heed::Result<()> { self.main .remap_types::>() .delete(txn, main_key::DISABLED_TYPOS_TERMS)?; Ok(()) } } impl DisabledTyposTerms { pub fn is_exact(&self, word: &str) -> bool { // If disable_on_numbers is true, we disable the word if it contains only numbers or punctuation self.disable_on_numbers && word.chars().all(|c| c.is_numeric() || c.is_ascii_punctuation()) } }