1use crate::util::itertools::Itertools as _;
9use crate::{Executor, Query};
10
11pub struct StoreOperationDispatch;
12
13impl StoreOperationDispatch {
14 pub fn dispatch(query: Query, executor: &Executor) -> Result<Option<String>, ()> {
15 match query {
17 Query::Search(store, query_id, lexer, limit, offset) => executor
18 .search(store, query_id, lexer, limit, offset)
19 .map(|results| {
20 if results.is_empty() {
21 None
22 } else {
23 Some(results.join(" "))
24 }
25 }),
26 Query::Suggest(store, query_id, lexer, limit) => executor
27 .suggest(store, query_id, lexer, limit)
28 .map(|results| results.map(|mut results| results.join(" "))),
29 Query::List(store, query_id, limit, offset) => executor
30 .list(store, query_id, limit, offset)
31 .map(|results| results.join(" "))
32 .map(Some),
33 Query::Push(store, lexer) => executor.push(store, lexer).map(|_| None),
34 Query::Pop(store, lexer) => executor
35 .pop(store, lexer)
36 .map(|count| Some(count.to_string())),
37 Query::Count(store) => executor.count(store).map(|count| Some(count.to_string())),
38 Query::FlushC(store) => executor.flushc(store).map(|count| Some(count.to_string())),
39 Query::FlushB(store) => executor.flushb(store).map(|count| Some(count.to_string())),
40 Query::FlushO(store) => executor.flusho(store).map(|count| Some(count.to_string())),
41 }
42 }
43}