Skip to main content

sonic/store/
operation.rs

1// Sonic
2//
3// Fast, lightweight and schema-less search backend
4// Copyright: 2019, Valerian Saliou <valerian@valeriansaliou.name>
5// Copyright: 2026, Rémi Bardon <remi@remibardon.name>
6// License: Mozilla Public License v2.0 (MPL v2.0)
7
8use 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        // Dispatch de-constructed query to its target executor
16        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}