teo_runtime/enum/member/
builder.rs1use std::collections::BTreeMap;
2use std::sync::{Arc, Mutex};
3use crate::app::data::AppData;
4use crate::comment::Comment;
5use crate::r#enum::member::Member;
6use crate::Value;
7
8#[derive(Debug, Clone)]
9pub struct Builder {
10 inner: Arc<Inner>
11}
12
13#[derive(Debug)]
14struct Inner {
15 name: String,
16 comment: Option<Comment>,
17 value: Value,
18 data: Arc<Mutex<BTreeMap<String, Value>>>,
19 app_data: AppData,
20}
21
22impl Builder {
23
24 pub fn new(name: String, value: Value, comment: Option<Comment>, app_data: AppData) -> Self {
25 Self {
26 inner: Arc::new(Inner {
27 name,
28 value,
29 comment,
30 data: Arc::new(Mutex::new(BTreeMap::new())),
31 app_data,
32 })
33 }
34 }
35
36 pub fn name(&self) -> &str {
37 &self.inner.name
38 }
39
40 pub fn comment(&self) -> Option<&Comment> {
41 self.inner.comment.as_ref()
42 }
43
44 pub fn value(&self) -> &Value {
45 &self.inner.value
46 }
47
48 pub fn data(&self) -> BTreeMap<String, Value> {
49 self.inner.data.lock().unwrap().clone()
50 }
51
52 pub fn set_data(&self, data: BTreeMap<String, Value>) {
53 *self.inner.data.lock().unwrap() = data;
54 }
55
56 pub fn insert_data_entry(&self, key: String, value: Value) {
57 self.inner.data.lock().unwrap().insert(key, value);
58 }
59
60 pub fn remove_data_entry(&self, key: &str) {
61 self.inner.data.lock().unwrap().remove(key);
62 }
63
64 pub fn data_entry(&self, key: &str) -> Option<Value> {
65 self.inner.data.lock().unwrap().get(key).cloned()
66 }
67
68 pub(crate) fn build(self) -> Member {
69 Member {
70 name: self.inner.name.clone(),
71 value: self.inner.value.clone(),
72 comment: self.inner.comment.clone(),
73 data: self.inner.data.lock().unwrap().clone(),
74 }
75 }
76
77 pub fn app_data(&self) -> &AppData {
78 &self.inner.app_data
79 }
80}