moduforge_runtime/
mark.rs1use 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}