use crate::executor::count::ExecutorCount;
use crate::executor::flushb::ExecutorFlushB;
use crate::executor::flushc::ExecutorFlushC;
use crate::executor::flusho::ExecutorFlushO;
use crate::executor::list::ExecutorList;
use crate::executor::pop::ExecutorPop;
use crate::executor::push::ExecutorPush;
use crate::executor::search::ExecutorSearch;
use crate::executor::suggest::ExecutorSuggest;
use crate::query::actions::Query;
pub struct StoreOperationDispatch;
impl StoreOperationDispatch {
pub fn dispatch(query: Query) -> Result<Option<String>, ()> {
match query {
Query::Search(store, query_id, lexer, limit, offset) => {
ExecutorSearch::execute(store, query_id, lexer, limit, offset)
.map(|results| results.map(|results| results.join(" ")))
}
Query::Suggest(store, query_id, lexer, limit) => {
ExecutorSuggest::execute(store, query_id, lexer, limit)
.map(|results| results.map(|results| results.join(" ")))
}
Query::List(store, query_id, limit, offset) => {
ExecutorList::execute(store, query_id, limit, offset)
.map(|results| results.join(" "))
.map(Some)
}
Query::Push(store, lexer) => ExecutorPush::execute(store, lexer).map(|_| None),
Query::Pop(store, lexer) => {
ExecutorPop::execute(store, lexer).map(|count| Some(count.to_string()))
}
Query::Count(store) => {
ExecutorCount::execute(store).map(|count| Some(count.to_string()))
}
Query::FlushC(store) => {
ExecutorFlushC::execute(store).map(|count| Some(count.to_string()))
}
Query::FlushB(store) => {
ExecutorFlushB::execute(store).map(|count| Some(count.to_string()))
}
Query::FlushO(store) => {
ExecutorFlushO::execute(store).map(|count| Some(count.to_string()))
}
}
}
}