1#[derive(Debug, Default, Clone, serde::Serialize, serde::Deserialize)]
3pub struct Command {
4 #[serde(flatten)]
5 pub base: super::Control,
6 #[serde(skip_serializing_if = "Option::is_none")]
8 pub discrete_value: Option<super::base::MridRef>,
9 #[serde(skip_serializing_if = "Option::is_none")]
11 pub value_alias_set: Option<super::base::MridRef>,
12 #[serde(skip_serializing_if = "Option::is_none")]
14 pub normal_value: Option<i64>,
15 #[serde(skip_serializing_if = "Option::is_none")]
17 pub value: Option<i64>,
18}
19impl crate::base::CimElement for Command {
20 fn mrid(&self) -> &str { &self.base.base.base.id }
21 fn type_name(&self) -> &'static str { "Command" }
22 fn as_any(&self) -> &dyn std::any::Any { self }
23 fn to_json_value(&self) -> serde_json::Value {
24 serde_json::to_value(self).unwrap_or(serde_json::Value::Null)
25 }
26 fn to_block(&self) -> crate::base::RdfBlock {
27 let mut block = self.base.to_block();
28 block.type_name = "Command".to_string();
29 if let Some(ref v) = self.discrete_value {
30 block.fields.insert("Command.DiscreteValue".into(), crate::base::FieldValue::Resource(v.mrid.clone()));
31 }
32 if let Some(ref v) = self.value_alias_set {
33 block.fields.insert("Command.ValueAliasSet".into(), crate::base::FieldValue::Resource(v.mrid.clone()));
34 }
35 if let Some(v) = self.normal_value {
36 block.fields.insert("Command.normalValue".into(), crate::base::FieldValue::Text(v.to_string()));
37 }
38 if let Some(v) = self.value {
39 block.fields.insert("Command.value".into(), crate::base::FieldValue::Text(v.to_string()));
40 }
41 block
42 }
43}
44
45impl Command {
46 pub fn from_block(b: &crate::base::RdfBlock) -> Self {
47 let mut obj = Self::default();
48 obj.base.base.base.id.clone_from(&b.mrid);
49 for (key, val) in &b.fields {
50 match key.as_str() {
51 "Command.DiscreteValue" => {
52 if let crate::base::FieldValue::Resource(sv) = val {
53 obj.discrete_value = Some(crate::base::MridRef { mrid: sv.clone() });
54 }
55 }
56 "Command.ValueAliasSet" => {
57 if let crate::base::FieldValue::Resource(sv) = val {
58 obj.value_alias_set = Some(crate::base::MridRef { mrid: sv.clone() });
59 }
60 }
61 "Command.normalValue" => {
62 match val {
63 crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.normal_value = Some(v); } }
64 crate::base::FieldValue::TextList(svs) => {
65 if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.normal_value = Some(v); } }
66 }
67 _ => {}
68 }
69 }
70 "Command.value" => {
71 match val {
72 crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.value = Some(v); } }
73 crate::base::FieldValue::TextList(svs) => {
74 if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.value = Some(v); } }
75 }
76 _ => {}
77 }
78 }
79 "Control.PowerSystemResource" => {
80 if let crate::base::FieldValue::Resource(sv) = val {
81 obj.base.power_system_resource = Some(crate::base::MridRef { mrid: sv.clone() });
82 }
83 }
84 "Control.controlType" => {
85 match val {
86 crate::base::FieldValue::Text(sv) => { obj.base.control_type = sv.clone(); }
87 crate::base::FieldValue::TextList(svs) => {
88 if let Some(sv) = svs.last() { obj.base.control_type = sv.clone(); }
89 }
90 _ => {}
91 }
92 }
93 "Control.operationInProgress" => {
94 match val {
95 crate::base::FieldValue::Text(sv) => { obj.base.operation_in_progress = Some(sv.trim() == "true"); }
96 crate::base::FieldValue::TextList(svs) => {
97 if let Some(sv) = svs.last() { obj.base.operation_in_progress = Some(sv.trim() == "true"); }
98 }
99 _ => {}
100 }
101 }
102 "Control.timeStamp" => {
103 match val {
104 crate::base::FieldValue::Text(sv) => { obj.base.time_stamp = sv.clone(); }
105 crate::base::FieldValue::TextList(svs) => {
106 if let Some(sv) = svs.last() { obj.base.time_stamp = sv.clone(); }
107 }
108 _ => {}
109 }
110 }
111 "Control.unitMultiplier" => {
112 if let crate::base::FieldValue::Resource(sv) = val {
113 obj.base.unit_multiplier = Some(crate::base::UriRef { uri: sv.clone() });
114 }
115 }
116 "Control.unitSymbol" => {
117 if let crate::base::FieldValue::Resource(sv) = val {
118 obj.base.unit_symbol = Some(crate::base::UriRef { uri: sv.clone() });
119 }
120 }
121 "IdentifiedObject.description" => {
122 match val {
123 crate::base::FieldValue::Text(sv) => { obj.base.base.base.description = sv.clone(); }
124 crate::base::FieldValue::TextList(svs) => {
125 if let Some(sv) = svs.last() { obj.base.base.base.description = sv.clone(); }
126 }
127 _ => {}
128 }
129 }
130 "IdentifiedObject.energyIdentCodeEic" => {
131 match val {
132 crate::base::FieldValue::Text(sv) => { obj.base.base.base.energy_ident_code_eic = sv.clone(); }
133 crate::base::FieldValue::TextList(svs) => {
134 if let Some(sv) = svs.last() { obj.base.base.base.energy_ident_code_eic = sv.clone(); }
135 }
136 _ => {}
137 }
138 }
139 "IdentifiedObject.mRID" => {
140 match val {
141 crate::base::FieldValue::Text(sv) => { obj.base.base.base.m_rid = sv.clone(); }
142 crate::base::FieldValue::TextList(svs) => {
143 if let Some(sv) = svs.last() { obj.base.base.base.m_rid = sv.clone(); }
144 }
145 _ => {}
146 }
147 }
148 "IdentifiedObject.name" => {
149 match val {
150 crate::base::FieldValue::Text(sv) => { obj.base.base.base.name = sv.clone(); }
151 crate::base::FieldValue::TextList(svs) => {
152 if let Some(sv) = svs.last() { obj.base.base.base.name = sv.clone(); }
153 }
154 _ => {}
155 }
156 }
157 "IdentifiedObject.shortName" => {
158 match val {
159 crate::base::FieldValue::Text(sv) => { obj.base.base.base.short_name = sv.clone(); }
160 crate::base::FieldValue::TextList(svs) => {
161 if let Some(sv) = svs.last() { obj.base.base.base.short_name = sv.clone(); }
162 }
163 _ => {}
164 }
165 }
166 _ => {}
167 }
168 }
169 obj
170 }
171}