moduforge_runtime/
mark.rs

1use std::collections::HashMap;
2
3use moduforge_model::{mark_type::MarkSpec, schema::AttributeSpec};
4use serde_json::Value;
5
6#[derive(Clone, PartialEq, Debug, Eq)]
7pub struct Mark {
8    pub name: String,
9    pub r#type: MarkSpec,
10}
11
12impl Mark {
13    pub fn new(
14        name: &str,
15        spec: MarkSpec,
16    ) -> Mark {
17        Mark { name: name.to_string(), r#type: spec }
18    }
19    pub fn set_name(
20        &mut self,
21        name: &str,
22    ) -> &mut Self {
23        self.name = name.to_string();
24        self
25    }
26    pub fn get_name(&self) -> &str {
27        &self.name
28    }
29
30    pub fn set_attrs(
31        &mut self,
32        attrs: HashMap<String, AttributeSpec>,
33    ) -> &mut Self {
34        self.r#type.attrs = Some(attrs);
35        self
36    }
37    pub fn set_attr(
38        &mut self,
39        name: &str,
40        default: Option<Value>,
41    ) -> &mut Self {
42        match &mut self.r#type.attrs {
43            Some(map) => {
44                map.insert(name.to_string(), AttributeSpec { default });
45            },
46            None => {
47                let mut new_map = HashMap::new();
48                new_map.insert(name.to_string(), AttributeSpec { default });
49                self.r#type.attrs = Some(new_map);
50            },
51        }
52        self
53    }
54    pub fn set_desc(
55        &mut self,
56        desc: &str,
57    ) -> &mut Self {
58        self.r#type.desc = Some(desc.to_string());
59        self
60    }
61}