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.get(entity).map(|v| v.as_slice()).unwrap_or(&[])
27    }
28
29    pub fn get_view(&self, id: &str) -> Option<&ViewSpec> {
30        self.by_id.get(id)
31    }
32}
33
34impl Default for ViewIndex {
35    fn default() -> Self {
36        Self::new()
37    }
38}