1use crate::database::key_value_database::KeySpace;
2
3pub struct ByKeySpace<T> {
4 infra: T,
5 task_meta: T,
6 task_data: T,
7 forward_task_cache: T,
8 reverse_task_cache: T,
9}
10
11impl<T> ByKeySpace<T> {
12 pub fn new(mut factory: impl FnMut(KeySpace) -> T) -> Self {
13 Self {
14 infra: factory(KeySpace::Infra),
15 task_meta: factory(KeySpace::TaskMeta),
16 task_data: factory(KeySpace::TaskData),
17 forward_task_cache: factory(KeySpace::ForwardTaskCache),
18 reverse_task_cache: factory(KeySpace::ReverseTaskCache),
19 }
20 }
21
22 pub fn get(&self, key_space: KeySpace) -> &T {
23 match key_space {
24 KeySpace::Infra => &self.infra,
25 KeySpace::TaskMeta => &self.task_meta,
26 KeySpace::TaskData => &self.task_data,
27 KeySpace::ForwardTaskCache => &self.forward_task_cache,
28 KeySpace::ReverseTaskCache => &self.reverse_task_cache,
29 }
30 }
31
32 pub fn get_mut(&mut self, key_space: KeySpace) -> &mut T {
33 match key_space {
34 KeySpace::Infra => &mut self.infra,
35 KeySpace::TaskMeta => &mut self.task_meta,
36 KeySpace::TaskData => &mut self.task_data,
37 KeySpace::ForwardTaskCache => &mut self.forward_task_cache,
38 KeySpace::ReverseTaskCache => &mut self.reverse_task_cache,
39 }
40 }
41
42 pub fn iter(&self) -> impl Iterator<Item = (KeySpace, &T)> {
43 [
44 (KeySpace::Infra, &self.infra),
45 (KeySpace::TaskMeta, &self.task_meta),
46 (KeySpace::TaskData, &self.task_data),
47 (KeySpace::ForwardTaskCache, &self.forward_task_cache),
48 (KeySpace::ReverseTaskCache, &self.reverse_task_cache),
49 ]
50 .into_iter()
51 }
52}
53