use crate::Database;
pub trait Iterator<'a, 'b> {
type Item;
fn get_similar_word(self, input_param: &'b str) -> &'a str;
fn partial_match(self, input_param: &'b str) -> Vec<&'a str>;
}
impl<'a, 'b> Iterator<'a, 'b> for std::slice::Iter<'a, &str> {
type Item = &'a str;
fn get_similar_word(self, input_param: &'b str) -> &'a str {
let galm = Database::default();
self.fold(("", usize::MAX), |most_similar_param, param| {
let distance = galm.get_word_distance(input_param, param);
if distance < most_similar_param.1 {
(param, distance)
} else {
most_similar_param
}
})
.0
}
fn partial_match(self, matching_string: &'b str) -> Vec<&'a str> {
let mut result: Vec<&'a str> = self
.filter(|string| string.contains(matching_string))
.cloned()
.collect();
result.sort_by_key(|string| string.chars().count());
result
}
}