1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
use strsim::hamming;

/// Using Hamming algorithm to guess possible similar fields.
pub fn guess_field<'a>(
    candidates: impl Iterator<Item = &'a str>,
    field_name: &str,
) -> Option<&'a str> {
    candidates.min_by_key(|candidate| hamming(candidate, field_name).unwrap_or(usize::max_value()))
}

pub fn format_guess(guess_field: Option<&str>) -> String {
    match guess_field {
        Some(v) => format!(" Did you mean {}?", v),
        None => "".to_owned(),
    }
}