const DEFAULT_SEPARATORS: &[char] = &['_', '-', ' ', ':', '/'];
const DEFAULT_TRIGRAM_BUDGET: usize = 6;
const DEFAULT_LIMIT: usize = 100;
const DEFAULT_MIN_SCORE: usize = 2;
pub struct QuickMatchConfig {
separators: &'static [char],
limit: usize,
trigram_budget: usize,
min_score: usize,
}
impl Default for QuickMatchConfig {
fn default() -> Self {
Self {
separators: DEFAULT_SEPARATORS,
limit: DEFAULT_LIMIT,
trigram_budget: DEFAULT_TRIGRAM_BUDGET,
min_score: DEFAULT_MIN_SCORE,
}
}
}
impl QuickMatchConfig {
pub fn new() -> Self {
Self::default()
}
pub fn with_limit(mut self, limit: usize) -> Self {
self.limit = limit.max(1);
self
}
pub fn with_trigram_budget(mut self, trigram_budget: usize) -> Self {
self.trigram_budget = trigram_budget.clamp(0, 20);
self
}
pub fn with_separators(mut self, separators: &'static [char]) -> Self {
self.separators = separators;
self
}
pub fn with_min_score(mut self, min_score: usize) -> Self {
self.min_score = min_score.max(1);
self
}
pub fn limit(&self) -> usize {
self.limit
}
pub fn trigram_budget(&self) -> usize {
self.trigram_budget
}
pub fn separators(&self) -> &[char] {
self.separators
}
pub fn min_score(&self) -> usize {
self.min_score
}
}