hyperstack_server/view/
registry.rs1use 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}