melodium_engine/building/
genesis_environment.rs1use 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 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}