From 3842ccc3a8b8ee2b85108c695e0ffa63daac086c Mon Sep 17 00:00:00 2001 From: Isvane <277444536+Isvane@users.noreply.github.com> Date: Thu, 30 Jul 2026 01:08:07 +0700 Subject: [PATCH] refactor(search)!: replace `is_exact` field with helper method --- examples/demo.rs | 5 ++++- examples/repl.rs | 6 +++++- src/lib.rs | 10 +++++++--- src/test.rs | 2 +- 4 files changed, 17 insertions(+), 6 deletions(-) diff --git a/examples/demo.rs b/examples/demo.rs index 5eb0afb..45cdd3d 100644 --- a/examples/demo.rs +++ b/examples/demo.rs @@ -73,7 +73,10 @@ fn main() -> Result<(), Box> { for result in &single_results { println!( " • Result: {} | exact: {} | key: '{}' | dist: {}", - result, result.is_exact, result.key, result.distance + result, + result.is_exact(), + result.key, + result.distance ); } diff --git a/examples/repl.rs b/examples/repl.rs index e435fbc..771c56c 100644 --- a/examples/repl.rs +++ b/examples/repl.rs @@ -59,7 +59,11 @@ fn main() -> Result<(), DictionaryError> { } else { println!("Found {} matches in {duration:?}", results.len()); for (i, result) in results.into_iter().enumerate() { - let exact_marker = if result.is_exact { " ✨ [EXACT]" } else { "" }; + let exact_marker = if result.is_exact() { + " ✨ [EXACT]" + } else { + "" + }; println!(" {}. {}{}", i + 1, result.key, exact_marker); } } diff --git a/src/lib.rs b/src/lib.rs index b450749..897b13c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -437,7 +437,6 @@ impl<'a> SearchBuilder<'a> { .into_iter() .map(|(dist, _char_diff, bytes)| { Ok(SearchResult { - is_exact: dist == 0, key: String::from_utf8(bytes)?, distance: dist, }) @@ -451,14 +450,19 @@ impl<'a> SearchBuilder<'a> { /// A matched item from a fuzzy search. #[derive(Debug, Clone, Eq, PartialEq)] pub struct SearchResult { - /// True if Levenshtein distance is 0. - pub is_exact: bool, /// The matched string. pub key: String, /// Levenshtein distance to the query. pub distance: u8, } +impl SearchResult { + #[inline] + pub fn is_exact(&self) -> bool { + self.distance == 0 + } +} + impl Display for SearchResult { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(f, "{} (distance: {})", self.key, self.distance) diff --git a/src/test.rs b/src/test.rs index c256814..94809d8 100644 --- a/src/test.rs +++ b/src/test.rs @@ -92,7 +92,7 @@ mod tests { // "baxana" should successfully resolve to "banana" assert_eq!(matches.len(), 1, "Expected exactly 1 match for index {}", i); assert_eq!(matches[0].key, "banana"); - assert_eq!(matches[0].is_exact, false); + assert_eq!(matches[0].is_exact(), false); } } }