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