1use minspan::minspan;
2
3use super::{history::History, settings::SearchMode};
4
5pub fn reorder_fuzzy(mode: SearchMode, query: &str, res: Vec<History>) -> Vec<History> {
6 match mode {
7 SearchMode::Fuzzy => reorder(query, |x| &x.command, res),
8 _ => res,
9 }
10}
11
12fn reorder<F, A>(query: &str, f: F, res: Vec<A>) -> Vec<A>
13where
14 F: Fn(&A) -> &String,
15 A: Clone,
16{
17 let mut r = res.clone();
18 let qvec = &query.chars().collect();
19 r.sort_by_cached_key(|h| {
20 let (from, to) = match minspan::span(qvec, &(f(h).chars().collect())) {
22 Some(x) => x,
23 None => (0, res.len()),
28 };
29 1 + to - from
30 });
31 r
32}