Skip to main content

melodium_engine/building/
genesis_environment.rs

1use melodium_common::descriptor::DataType;
2use melodium_common::executive::{Model, Value};
3use std::collections::HashMap;
4use std::sync::Arc;
5
6#[derive(Debug, Clone)]
7pub struct GenesisEnvironment {
8    models: HashMap<String, Arc<dyn Model>>,
9    generics: HashMap<String, DataType>,
10    // All variables that can be determined at static build (all consts and some vars).
11    variables: HashMap<String, Value>,
12}
13
14impl GenesisEnvironment {
15    pub fn new() -> Self {
16        Self {
17            models: HashMap::new(),
18            generics: HashMap::new(),
19            variables: HashMap::new(),
20        }
21    }
22
23    pub fn add_model(&mut self, name: &str, model: Arc<dyn Model>) {
24        self.models.insert(name.to_string(), model);
25    }
26
27    pub fn get_model(&self, name: &str) -> Option<&Arc<dyn Model>> {
28        self.models.get(name)
29    }
30
31    pub fn models(&self) -> &HashMap<String, Arc<dyn Model>> {
32        &self.models
33    }
34
35    pub fn add_generic(&mut self, name: &str, generic: DataType) {
36        self.generics.insert(name.to_string(), generic);
37    }
38
39    pub fn get_generic(&self, name: &str) -> Option<&DataType> {
40        self.generics.get(name)
41    }
42
43    pub fn generics(&self) -> &HashMap<String, DataType> {
44        &self.generics
45    }
46
47    pub fn add_variable(&mut self, name: &str, value: Value) {
48        self.variables.insert(name.to_string(), value);
49    }
50
51    pub fn get_variable(&self, name: &str) -> Option<&Value> {
52        self.variables.get(name)
53    }
54
55    pub fn variables(&self) -> &HashMap<String, Value> {
56        &self.variables
57    }
58}