matchmaker/
noninteractive.rs1use std::{time::{Duration, Instant}};
2
3use crate::{SSS, nucleo::{Column, Render, Worker, injector::Injector}};
4
5pub fn get_matches<T: SSS + Render>(
7 items: impl IntoIterator<Item = T>,
8 query: &str,
9 timeout: Duration,
10 mut f: impl FnMut(&T) -> bool
11) {
12 let mut worker = Worker::new(
13 [Column::new("", |item: &T| item.as_text())]
14 , 0
15 );
16 let mut total = 0;
17
18 let injector = worker.injector();
19 for i in items {
20 total += 1;
21 let _ = injector.push(i);
22 }
23
24 worker.find(query);
25
26 let start = Instant::now();
27 loop {
28 let (_, status) = Worker::new_snapshot(&mut worker.nucleo);
29
30 if status.item_count == total && !status.running {
31 break;
32 }
33
34 if start.elapsed() >= timeout {
35 break;
36 }
37 }
39
40 for t in worker.raw_results() {
41 if f(t) {
42 break
43 }
44 }
45}