hyperstack_server/view/
registry.rs

1use crate::view::ViewSpec;
2use std::collections::HashMap;
3
4pub struct ViewIndex {
5    by_export: HashMap<String, Vec<ViewSpec>>,
6    by_id: HashMap<String, ViewSpec>,
7}
8
9impl ViewIndex {
10    pub fn new() -> Self {
11        Self {
12            by_export: HashMap::new(),
13            by_id: HashMap::new(),
14        }
15    }
16
17    pub fn add_spec(&mut self, spec: ViewSpec) {
18        self.by_export
19            .entry(spec.export.clone())
20            .or_default()
21            .push(spec.clone());
22        self.by_id.insert(spec.id.clone(), spec);
23    }
24
25    pub fn by_export(&self, entity: &str) -> &[ViewSpec] {
26        self.by_export
27            .get(entity)
28            .map(|v| v.as_slice())
29            .unwrap_or(&[])
30    }
31
32    pub fn get_view(&self, id: &str) -> Option<&ViewSpec> {
33        self.by_id.get(id)
34    }
35}
36
37impl Default for ViewIndex {
38    fn default() -> Self {
39        Self::new()
40    }
41}