Skip to main content

cimstructs/
WindGeneratingUnit.rs

1/// A wind driven generating unit, connected to the grid by means of a rotating machine. May be used to represent a single turbine or an aggregation.
2#[derive(Debug, Default, Clone, serde::Serialize, serde::Deserialize)]
3pub struct WindGeneratingUnit {
4    #[serde(flatten)]
5    pub base: super::GeneratingUnit,
6    /// A wind power plant may have wind generating units.
7    #[serde(skip_serializing_if = "Option::is_none")]
8    pub wind_power_plant: Option<super::base::MridRef>,
9    /// The kind of wind generating unit.
10    #[serde(skip_serializing_if = "Option::is_none")]
11    pub wind_gen_unit_type: Option<super::base::UriRef>,
12}
13impl crate::base::CimElement for WindGeneratingUnit {
14    fn mrid(&self) -> &str { &self.base.base.base.base.id }
15    fn type_name(&self) -> &'static str { "WindGeneratingUnit" }
16    fn as_any(&self) -> &dyn std::any::Any { self }
17    fn to_json_value(&self) -> serde_json::Value {
18        serde_json::to_value(self).unwrap_or(serde_json::Value::Null)
19    }
20    fn to_block(&self) -> crate::base::RdfBlock {
21        let mut block = self.base.to_block();
22        block.type_name = "WindGeneratingUnit".to_string();
23        if let Some(ref v) = self.wind_power_plant {
24            block.fields.insert("WindGeneratingUnit.WindPowerPlant".into(), crate::base::FieldValue::Resource(v.mrid.clone()));
25        }
26        if let Some(ref v) = self.wind_gen_unit_type {
27            block.fields.insert("WindGeneratingUnit.windGenUnitType".into(), crate::base::FieldValue::Resource(v.uri.clone()));
28        }
29        block
30    }
31}
32
33impl WindGeneratingUnit {
34    pub fn from_block(b: &crate::base::RdfBlock) -> Self {
35        let mut obj = Self::default();
36        obj.base.base.base.base.id.clone_from(&b.mrid);
37        for (key, val) in &b.fields {
38            match key.as_str() {
39                "WindGeneratingUnit.WindPowerPlant" => {
40                    if let crate::base::FieldValue::Resource(sv) = val {
41                        obj.wind_power_plant = Some(crate::base::MridRef { mrid: sv.clone() });
42                    }
43                }
44                "WindGeneratingUnit.windGenUnitType" => {
45                    if let crate::base::FieldValue::Resource(sv) = val {
46                        obj.wind_gen_unit_type = Some(crate::base::UriRef { uri: sv.clone() });
47                    }
48                }
49                "GeneratingUnit.genControlSource" => {
50                    if let crate::base::FieldValue::Resource(sv) = val {
51                        obj.base.gen_control_source = Some(crate::base::UriRef { uri: sv.clone() });
52                    }
53                }
54                "GeneratingUnit.governorSCD" => {
55                    match val {
56                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.governor_scd = Some(v); } }
57                        crate::base::FieldValue::TextList(svs) => {
58                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.governor_scd = Some(v); } }
59                        }
60                        _ => {}
61                    }
62                }
63                "GeneratingUnit.longPF" => {
64                    match val {
65                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.long_pf = Some(v); } }
66                        crate::base::FieldValue::TextList(svs) => {
67                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.long_pf = Some(v); } }
68                        }
69                        _ => {}
70                    }
71                }
72                "GeneratingUnit.maxOperatingP" => {
73                    match val {
74                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.max_operating_p = Some(v); } }
75                        crate::base::FieldValue::TextList(svs) => {
76                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.max_operating_p = Some(v); } }
77                        }
78                        _ => {}
79                    }
80                }
81                "GeneratingUnit.maximumAllowableSpinningReserve" => {
82                    match val {
83                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.maximum_allowable_spinning_reserve = Some(v); } }
84                        crate::base::FieldValue::TextList(svs) => {
85                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.maximum_allowable_spinning_reserve = Some(v); } }
86                        }
87                        _ => {}
88                    }
89                }
90                "GeneratingUnit.minOperatingP" => {
91                    match val {
92                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.min_operating_p = Some(v); } }
93                        crate::base::FieldValue::TextList(svs) => {
94                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.min_operating_p = Some(v); } }
95                        }
96                        _ => {}
97                    }
98                }
99                "GeneratingUnit.nominalP" => {
100                    match val {
101                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.nominal_p = Some(v); } }
102                        crate::base::FieldValue::TextList(svs) => {
103                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.nominal_p = Some(v); } }
104                        }
105                        _ => {}
106                    }
107                }
108                "GeneratingUnit.normalPF" => {
109                    match val {
110                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.normal_pf = Some(v); } }
111                        crate::base::FieldValue::TextList(svs) => {
112                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.normal_pf = Some(v); } }
113                        }
114                        _ => {}
115                    }
116                }
117                "GeneratingUnit.ratedGrossMaxP" => {
118                    match val {
119                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.rated_gross_max_p = Some(v); } }
120                        crate::base::FieldValue::TextList(svs) => {
121                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.rated_gross_max_p = Some(v); } }
122                        }
123                        _ => {}
124                    }
125                }
126                "GeneratingUnit.ratedGrossMinP" => {
127                    match val {
128                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.rated_gross_min_p = Some(v); } }
129                        crate::base::FieldValue::TextList(svs) => {
130                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.rated_gross_min_p = Some(v); } }
131                        }
132                        _ => {}
133                    }
134                }
135                "GeneratingUnit.ratedNetMaxP" => {
136                    match val {
137                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.rated_net_max_p = Some(v); } }
138                        crate::base::FieldValue::TextList(svs) => {
139                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.rated_net_max_p = Some(v); } }
140                        }
141                        _ => {}
142                    }
143                }
144                "GeneratingUnit.shortPF" => {
145                    match val {
146                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.short_pf = Some(v); } }
147                        crate::base::FieldValue::TextList(svs) => {
148                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.short_pf = Some(v); } }
149                        }
150                        _ => {}
151                    }
152                }
153                "GeneratingUnit.startupCost" => {
154                    match val {
155                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.startup_cost = Some(v); } }
156                        crate::base::FieldValue::TextList(svs) => {
157                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.startup_cost = Some(v); } }
158                        }
159                        _ => {}
160                    }
161                }
162                "GeneratingUnit.startupTime" => {
163                    match val {
164                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.startup_time = Some(v); } }
165                        crate::base::FieldValue::TextList(svs) => {
166                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.startup_time = Some(v); } }
167                        }
168                        _ => {}
169                    }
170                }
171                "GeneratingUnit.totalEfficiency" => {
172                    match val {
173                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.total_efficiency = Some(v); } }
174                        crate::base::FieldValue::TextList(svs) => {
175                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.total_efficiency = Some(v); } }
176                        }
177                        _ => {}
178                    }
179                }
180                "GeneratingUnit.variableCost" => {
181                    match val {
182                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.variable_cost = Some(v); } }
183                        crate::base::FieldValue::TextList(svs) => {
184                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.variable_cost = Some(v); } }
185                        }
186                        _ => {}
187                    }
188                }
189                "Equipment.EquipmentContainer" => {
190                    if let crate::base::FieldValue::Resource(sv) = val {
191                        obj.base.base.equipment_container = Some(crate::base::MridRef { mrid: sv.clone() });
192                    }
193                }
194                "Equipment.aggregate" => {
195                    match val {
196                        crate::base::FieldValue::Text(sv) => { obj.base.base.aggregate = Some(sv.trim() == "true"); }
197                        crate::base::FieldValue::TextList(svs) => {
198                            if let Some(sv) = svs.last() { obj.base.base.aggregate = Some(sv.trim() == "true"); }
199                        }
200                        _ => {}
201                    }
202                }
203                "Equipment.inService" => {
204                    match val {
205                        crate::base::FieldValue::Text(sv) => { obj.base.base.in_service = Some(sv.trim() == "true"); }
206                        crate::base::FieldValue::TextList(svs) => {
207                            if let Some(sv) = svs.last() { obj.base.base.in_service = Some(sv.trim() == "true"); }
208                        }
209                        _ => {}
210                    }
211                }
212                "Equipment.normallyInService" => {
213                    match val {
214                        crate::base::FieldValue::Text(sv) => { obj.base.base.normally_in_service = Some(sv.trim() == "true"); }
215                        crate::base::FieldValue::TextList(svs) => {
216                            if let Some(sv) = svs.last() { obj.base.base.normally_in_service = Some(sv.trim() == "true"); }
217                        }
218                        _ => {}
219                    }
220                }
221                "IdentifiedObject.description" => {
222                    match val {
223                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.base.description = sv.clone(); }
224                        crate::base::FieldValue::TextList(svs) => {
225                            if let Some(sv) = svs.last() { obj.base.base.base.base.description = sv.clone(); }
226                        }
227                        _ => {}
228                    }
229                }
230                "IdentifiedObject.energyIdentCodeEic" => {
231                    match val {
232                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.base.energy_ident_code_eic = sv.clone(); }
233                        crate::base::FieldValue::TextList(svs) => {
234                            if let Some(sv) = svs.last() { obj.base.base.base.base.energy_ident_code_eic = sv.clone(); }
235                        }
236                        _ => {}
237                    }
238                }
239                "IdentifiedObject.mRID" => {
240                    match val {
241                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.base.m_rid = sv.clone(); }
242                        crate::base::FieldValue::TextList(svs) => {
243                            if let Some(sv) = svs.last() { obj.base.base.base.base.m_rid = sv.clone(); }
244                        }
245                        _ => {}
246                    }
247                }
248                "IdentifiedObject.name" => {
249                    match val {
250                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.base.name = sv.clone(); }
251                        crate::base::FieldValue::TextList(svs) => {
252                            if let Some(sv) = svs.last() { obj.base.base.base.base.name = sv.clone(); }
253                        }
254                        _ => {}
255                    }
256                }
257                "IdentifiedObject.shortName" => {
258                    match val {
259                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.base.short_name = sv.clone(); }
260                        crate::base::FieldValue::TextList(svs) => {
261                            if let Some(sv) = svs.last() { obj.base.base.base.base.short_name = sv.clone(); }
262                        }
263                        _ => {}
264                    }
265                }
266                _ => {}
267            }
268        }
269        obj
270    }
271}