hyper_scripter/query/
list_query_handler.rs1use super::{do_script_query_strict, ListQuery, ScriptQuery};
2use crate::error::{Error, Result};
3use crate::script::ScriptName;
4use crate::script_repo::{RepoEntry, ScriptRepo, Visibility};
5
6pub trait ListQueryHandler {
7 type Item;
8 async fn handle_query<'a, T: StableRepo>(
9 &mut self,
10 query: ScriptQuery,
11 repo: &'a mut T,
12 ) -> Result<Option<RepoEntry<'a>>>;
13 fn handle_item(&mut self, item: Self::Item) -> Option<ListQuery>;
14 fn should_raise_dont_fuzz_on_empty() -> bool;
15 fn should_return_all_on_empty() -> bool;
16}
17
18pub struct DefaultListQueryHandler;
19
20impl ListQueryHandler for DefaultListQueryHandler {
21 type Item = ListQuery;
22 async fn handle_query<'a, T: StableRepo>(
23 &mut self,
24 query: ScriptQuery,
25 repo: &'a mut T,
26 ) -> Result<Option<RepoEntry<'a>>> {
27 match do_script_query_strict(&query, repo).await {
28 Ok(script) => Ok(Some(script)),
29 Err(Error::DontFuzz) => Ok(None),
30 Err(err) => Err(err),
31 }
32 }
33 fn handle_item(&mut self, item: Self::Item) -> Option<ListQuery> {
34 Some(item)
35 }
36 fn should_raise_dont_fuzz_on_empty() -> bool {
37 true
38 }
39 fn should_return_all_on_empty() -> bool {
40 true
41 }
42}
43
44pub trait StableRepo {
46 fn iter_mut(&mut self, visibility: Visibility) -> impl Iterator<Item = RepoEntry<'_>>;
47 fn latest_mut(&mut self, n: usize, visibility: Visibility) -> Option<RepoEntry<'_>>;
48 fn get_mut(&mut self, name: &ScriptName, visibility: Visibility) -> Option<RepoEntry<'_>>;
49}
50
51impl StableRepo for ScriptRepo {
52 fn iter_mut(&mut self, visibility: Visibility) -> impl Iterator<Item = RepoEntry<'_>> {
53 self.iter_mut(visibility)
54 }
55 fn latest_mut(&mut self, n: usize, visibility: Visibility) -> Option<RepoEntry<'_>> {
56 self.latest_mut(n, visibility)
57 }
58 fn get_mut(&mut self, name: &ScriptName, visibility: Visibility) -> Option<RepoEntry<'_>> {
59 self.get_mut(name, visibility)
60 }
61}