Skip to main content

cimstructs/
GovHydroFrancis.rs

1/// Detailed hydro unit - Francis model. This model can be used to represent three types of governors. A schematic of the hydraulic system of detailed hydro unit models, such as Francis and Pelton, is provided in the DetailedHydroModelHydraulicSystem diagram.
2#[derive(Debug, Default, Clone, serde::Serialize, serde::Deserialize)]
3pub struct GovHydroFrancis {
4    #[serde(flatten)]
5    pub base: super::TurbineGovernorDynamics,
6    /// Opening section SEFF at the maximum efficiency (Am). Typical value = 0,7.
7    #[serde(skip_serializing_if = "Option::is_none")]
8    pub am: Option<f64>,
9    /// Area of the surge tank (AV0). Unit = m2. Typical value = 30.
10    #[serde(skip_serializing_if = "Option::is_none")]
11    pub av0: Option<f64>,
12    /// Area of the compensation tank (AV1). Unit = m2. Typical value = 700.
13    #[serde(skip_serializing_if = "Option::is_none")]
14    pub av1: Option<f64>,
15    /// Droop (Bp). Typical value = 0,05.
16    #[serde(skip_serializing_if = "Option::is_none")]
17    pub bp: Option<f64>,
18    /// Intentional dead-band width (DB1). Unit = Hz. Typical value = 0.
19    #[serde(skip_serializing_if = "Option::is_none")]
20    pub db1: Option<f64>,
21    /// Maximum efficiency (EtaMax). Typical value = 1,05.
22    #[serde(skip_serializing_if = "Option::is_none")]
23    pub etamax: Option<f64>,
24    /// Governor control flag (Cflag). Typical value = mechanicHydrolicTachoAccelerator.
25    #[serde(skip_serializing_if = "Option::is_none")]
26    pub governor_control: Option<super::base::UriRef>,
27    /// Head of compensation chamber water level with respect to the level of penstock (H1). Unit = km. Typical value = 0,004.
28    #[serde(skip_serializing_if = "Option::is_none")]
29    pub h1: Option<f64>,
30    /// Head of surge tank water level with respect to the level of penstock (H2). Unit = km. Typical value = 0,040.
31    #[serde(skip_serializing_if = "Option::is_none")]
32    pub h2: Option<f64>,
33    /// Rated hydraulic head (Hn). Unit = km. Typical value = 0,250.
34    #[serde(skip_serializing_if = "Option::is_none")]
35    pub hn: Option<f64>,
36    /// Penstock loss coefficient (due to friction) (Kc). Typical value = 0,025.
37    #[serde(skip_serializing_if = "Option::is_none")]
38    pub kc: Option<f64>,
39    /// Water tunnel and surge chamber loss coefficient (due to friction) (Kg). Typical value = 0,025.
40    #[serde(skip_serializing_if = "Option::is_none")]
41    pub kg: Option<f64>,
42    /// Washout gain (Kt). Typical value = 0,25.
43    #[serde(skip_serializing_if = "Option::is_none")]
44    pub kt: Option<f64>,
45    /// No-load turbine flow at nominal head (Qc0). Typical value = 0,1.
46    #[serde(skip_serializing_if = "Option::is_none")]
47    pub qc0: Option<f64>,
48    /// Rated flow (Qn). Unit = m3/s. Typical value = 250.
49    #[serde(skip_serializing_if = "Option::is_none")]
50    pub qn: Option<f64>,
51    /// Derivative gain (Ta) (>= 0). Typical value = 3.
52    #[serde(skip_serializing_if = "Option::is_none")]
53    pub ta: Option<f64>,
54    /// Washout time constant (Td) (>= 0). Typical value = 6.
55    #[serde(skip_serializing_if = "Option::is_none")]
56    pub td: Option<f64>,
57    /// Gate servo time constant (Ts) (>= 0). Typical value = 0,5.
58    #[serde(skip_serializing_if = "Option::is_none")]
59    pub ts: Option<f64>,
60    /// Water inertia time constant (Twnc) (>= 0). Typical value = 1.
61    #[serde(skip_serializing_if = "Option::is_none")]
62    pub twnc: Option<f64>,
63    /// Water tunnel and surge chamber inertia time constant (Twng) (>= 0). Typical value = 3.
64    #[serde(skip_serializing_if = "Option::is_none")]
65    pub twng: Option<f64>,
66    /// Derivative feedback gain (Tx) (>= 0). Typical value = 1.
67    #[serde(skip_serializing_if = "Option::is_none")]
68    pub tx: Option<f64>,
69    /// Maximum gate opening velocity (Va). Unit = PU / s. Typical value = 0,06.
70    #[serde(skip_serializing_if = "Option::is_none")]
71    pub va: Option<f64>,
72    /// Maximum gate opening (ValvMax) (> GovHydroFrancis.valvmin). Typical value = 1,1.
73    #[serde(skip_serializing_if = "Option::is_none")]
74    pub valvmax: Option<f64>,
75    /// Minimum gate opening (ValvMin) (< GovHydroFrancis.valvmax). Typical value = 0.
76    #[serde(skip_serializing_if = "Option::is_none")]
77    pub valvmin: Option<f64>,
78    /// Maximum gate closing velocity (Vc). Unit = PU / s. Typical value = -0,06.
79    #[serde(skip_serializing_if = "Option::is_none")]
80    pub vc: Option<f64>,
81    /// Water tunnel and surge chamber simulation (Tflag). true = enable of water tunnel and surge chamber simulation false = inhibit of water tunnel and surge chamber simulation. Typical value = false.
82    #[serde(skip_serializing_if = "Option::is_none")]
83    pub water_tunnel_surge_chamber_simulation: Option<bool>,
84    /// Head of upper water level with respect to the level of penstock (Zsfc). Unit = km. Typical value = 0,025.
85    #[serde(skip_serializing_if = "Option::is_none")]
86    pub zsfc: Option<f64>,
87}
88impl crate::base::CimElement for GovHydroFrancis {
89    fn mrid(&self) -> &str { &self.base.base.base.id }
90    fn type_name(&self) -> &'static str { "GovHydroFrancis" }
91    fn as_any(&self) -> &dyn std::any::Any { self }
92    fn to_json_value(&self) -> serde_json::Value {
93        serde_json::to_value(self).unwrap_or(serde_json::Value::Null)
94    }
95    fn to_block(&self) -> crate::base::RdfBlock {
96        let mut block = self.base.to_block();
97        block.type_name = "GovHydroFrancis".to_string();
98        if let Some(v) = self.am {
99            block.fields.insert("GovHydroFrancis.am".into(), crate::base::FieldValue::Text(v.to_string()));
100        }
101        if let Some(v) = self.av0 {
102            block.fields.insert("GovHydroFrancis.av0".into(), crate::base::FieldValue::Text(v.to_string()));
103        }
104        if let Some(v) = self.av1 {
105            block.fields.insert("GovHydroFrancis.av1".into(), crate::base::FieldValue::Text(v.to_string()));
106        }
107        if let Some(v) = self.bp {
108            block.fields.insert("GovHydroFrancis.bp".into(), crate::base::FieldValue::Text(v.to_string()));
109        }
110        if let Some(v) = self.db1 {
111            block.fields.insert("GovHydroFrancis.db1".into(), crate::base::FieldValue::Text(v.to_string()));
112        }
113        if let Some(v) = self.etamax {
114            block.fields.insert("GovHydroFrancis.etamax".into(), crate::base::FieldValue::Text(v.to_string()));
115        }
116        if let Some(ref v) = self.governor_control {
117            block.fields.insert("GovHydroFrancis.governorControl".into(), crate::base::FieldValue::Resource(v.uri.clone()));
118        }
119        if let Some(v) = self.h1 {
120            block.fields.insert("GovHydroFrancis.h1".into(), crate::base::FieldValue::Text(v.to_string()));
121        }
122        if let Some(v) = self.h2 {
123            block.fields.insert("GovHydroFrancis.h2".into(), crate::base::FieldValue::Text(v.to_string()));
124        }
125        if let Some(v) = self.hn {
126            block.fields.insert("GovHydroFrancis.hn".into(), crate::base::FieldValue::Text(v.to_string()));
127        }
128        if let Some(v) = self.kc {
129            block.fields.insert("GovHydroFrancis.kc".into(), crate::base::FieldValue::Text(v.to_string()));
130        }
131        if let Some(v) = self.kg {
132            block.fields.insert("GovHydroFrancis.kg".into(), crate::base::FieldValue::Text(v.to_string()));
133        }
134        if let Some(v) = self.kt {
135            block.fields.insert("GovHydroFrancis.kt".into(), crate::base::FieldValue::Text(v.to_string()));
136        }
137        if let Some(v) = self.qc0 {
138            block.fields.insert("GovHydroFrancis.qc0".into(), crate::base::FieldValue::Text(v.to_string()));
139        }
140        if let Some(v) = self.qn {
141            block.fields.insert("GovHydroFrancis.qn".into(), crate::base::FieldValue::Text(v.to_string()));
142        }
143        if let Some(v) = self.ta {
144            block.fields.insert("GovHydroFrancis.ta".into(), crate::base::FieldValue::Text(v.to_string()));
145        }
146        if let Some(v) = self.td {
147            block.fields.insert("GovHydroFrancis.td".into(), crate::base::FieldValue::Text(v.to_string()));
148        }
149        if let Some(v) = self.ts {
150            block.fields.insert("GovHydroFrancis.ts".into(), crate::base::FieldValue::Text(v.to_string()));
151        }
152        if let Some(v) = self.twnc {
153            block.fields.insert("GovHydroFrancis.twnc".into(), crate::base::FieldValue::Text(v.to_string()));
154        }
155        if let Some(v) = self.twng {
156            block.fields.insert("GovHydroFrancis.twng".into(), crate::base::FieldValue::Text(v.to_string()));
157        }
158        if let Some(v) = self.tx {
159            block.fields.insert("GovHydroFrancis.tx".into(), crate::base::FieldValue::Text(v.to_string()));
160        }
161        if let Some(v) = self.va {
162            block.fields.insert("GovHydroFrancis.va".into(), crate::base::FieldValue::Text(v.to_string()));
163        }
164        if let Some(v) = self.valvmax {
165            block.fields.insert("GovHydroFrancis.valvmax".into(), crate::base::FieldValue::Text(v.to_string()));
166        }
167        if let Some(v) = self.valvmin {
168            block.fields.insert("GovHydroFrancis.valvmin".into(), crate::base::FieldValue::Text(v.to_string()));
169        }
170        if let Some(v) = self.vc {
171            block.fields.insert("GovHydroFrancis.vc".into(), crate::base::FieldValue::Text(v.to_string()));
172        }
173        if let Some(v) = self.water_tunnel_surge_chamber_simulation {
174            block.fields.insert("GovHydroFrancis.waterTunnelSurgeChamberSimulation".into(), crate::base::FieldValue::Text(v.to_string()));
175        }
176        if let Some(v) = self.zsfc {
177            block.fields.insert("GovHydroFrancis.zsfc".into(), crate::base::FieldValue::Text(v.to_string()));
178        }
179        block
180    }
181}
182
183impl GovHydroFrancis {
184    pub fn from_block(b: &crate::base::RdfBlock) -> Self {
185        let mut obj = Self::default();
186        obj.base.base.base.id.clone_from(&b.mrid);
187        for (key, val) in &b.fields {
188            match key.as_str() {
189                "GovHydroFrancis.am" => {
190                    match val {
191                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.am = Some(v); } }
192                        crate::base::FieldValue::TextList(svs) => {
193                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.am = Some(v); } }
194                        }
195                        _ => {}
196                    }
197                }
198                "GovHydroFrancis.av0" => {
199                    match val {
200                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.av0 = Some(v); } }
201                        crate::base::FieldValue::TextList(svs) => {
202                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.av0 = Some(v); } }
203                        }
204                        _ => {}
205                    }
206                }
207                "GovHydroFrancis.av1" => {
208                    match val {
209                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.av1 = Some(v); } }
210                        crate::base::FieldValue::TextList(svs) => {
211                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.av1 = Some(v); } }
212                        }
213                        _ => {}
214                    }
215                }
216                "GovHydroFrancis.bp" => {
217                    match val {
218                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.bp = Some(v); } }
219                        crate::base::FieldValue::TextList(svs) => {
220                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.bp = Some(v); } }
221                        }
222                        _ => {}
223                    }
224                }
225                "GovHydroFrancis.db1" => {
226                    match val {
227                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.db1 = Some(v); } }
228                        crate::base::FieldValue::TextList(svs) => {
229                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.db1 = Some(v); } }
230                        }
231                        _ => {}
232                    }
233                }
234                "GovHydroFrancis.etamax" => {
235                    match val {
236                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.etamax = Some(v); } }
237                        crate::base::FieldValue::TextList(svs) => {
238                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.etamax = Some(v); } }
239                        }
240                        _ => {}
241                    }
242                }
243                "GovHydroFrancis.governorControl" => {
244                    if let crate::base::FieldValue::Resource(sv) = val {
245                        obj.governor_control = Some(crate::base::UriRef { uri: sv.clone() });
246                    }
247                }
248                "GovHydroFrancis.h1" => {
249                    match val {
250                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.h1 = Some(v); } }
251                        crate::base::FieldValue::TextList(svs) => {
252                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.h1 = Some(v); } }
253                        }
254                        _ => {}
255                    }
256                }
257                "GovHydroFrancis.h2" => {
258                    match val {
259                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.h2 = Some(v); } }
260                        crate::base::FieldValue::TextList(svs) => {
261                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.h2 = Some(v); } }
262                        }
263                        _ => {}
264                    }
265                }
266                "GovHydroFrancis.hn" => {
267                    match val {
268                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.hn = Some(v); } }
269                        crate::base::FieldValue::TextList(svs) => {
270                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.hn = Some(v); } }
271                        }
272                        _ => {}
273                    }
274                }
275                "GovHydroFrancis.kc" => {
276                    match val {
277                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.kc = Some(v); } }
278                        crate::base::FieldValue::TextList(svs) => {
279                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.kc = Some(v); } }
280                        }
281                        _ => {}
282                    }
283                }
284                "GovHydroFrancis.kg" => {
285                    match val {
286                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.kg = Some(v); } }
287                        crate::base::FieldValue::TextList(svs) => {
288                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.kg = Some(v); } }
289                        }
290                        _ => {}
291                    }
292                }
293                "GovHydroFrancis.kt" => {
294                    match val {
295                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.kt = Some(v); } }
296                        crate::base::FieldValue::TextList(svs) => {
297                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.kt = Some(v); } }
298                        }
299                        _ => {}
300                    }
301                }
302                "GovHydroFrancis.qc0" => {
303                    match val {
304                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.qc0 = Some(v); } }
305                        crate::base::FieldValue::TextList(svs) => {
306                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.qc0 = Some(v); } }
307                        }
308                        _ => {}
309                    }
310                }
311                "GovHydroFrancis.qn" => {
312                    match val {
313                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.qn = Some(v); } }
314                        crate::base::FieldValue::TextList(svs) => {
315                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.qn = Some(v); } }
316                        }
317                        _ => {}
318                    }
319                }
320                "GovHydroFrancis.ta" => {
321                    match val {
322                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.ta = Some(v); } }
323                        crate::base::FieldValue::TextList(svs) => {
324                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.ta = Some(v); } }
325                        }
326                        _ => {}
327                    }
328                }
329                "GovHydroFrancis.td" => {
330                    match val {
331                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.td = Some(v); } }
332                        crate::base::FieldValue::TextList(svs) => {
333                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.td = Some(v); } }
334                        }
335                        _ => {}
336                    }
337                }
338                "GovHydroFrancis.ts" => {
339                    match val {
340                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.ts = Some(v); } }
341                        crate::base::FieldValue::TextList(svs) => {
342                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.ts = Some(v); } }
343                        }
344                        _ => {}
345                    }
346                }
347                "GovHydroFrancis.twnc" => {
348                    match val {
349                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.twnc = Some(v); } }
350                        crate::base::FieldValue::TextList(svs) => {
351                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.twnc = Some(v); } }
352                        }
353                        _ => {}
354                    }
355                }
356                "GovHydroFrancis.twng" => {
357                    match val {
358                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.twng = Some(v); } }
359                        crate::base::FieldValue::TextList(svs) => {
360                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.twng = Some(v); } }
361                        }
362                        _ => {}
363                    }
364                }
365                "GovHydroFrancis.tx" => {
366                    match val {
367                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.tx = Some(v); } }
368                        crate::base::FieldValue::TextList(svs) => {
369                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.tx = Some(v); } }
370                        }
371                        _ => {}
372                    }
373                }
374                "GovHydroFrancis.va" => {
375                    match val {
376                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.va = Some(v); } }
377                        crate::base::FieldValue::TextList(svs) => {
378                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.va = Some(v); } }
379                        }
380                        _ => {}
381                    }
382                }
383                "GovHydroFrancis.valvmax" => {
384                    match val {
385                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.valvmax = Some(v); } }
386                        crate::base::FieldValue::TextList(svs) => {
387                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.valvmax = Some(v); } }
388                        }
389                        _ => {}
390                    }
391                }
392                "GovHydroFrancis.valvmin" => {
393                    match val {
394                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.valvmin = Some(v); } }
395                        crate::base::FieldValue::TextList(svs) => {
396                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.valvmin = Some(v); } }
397                        }
398                        _ => {}
399                    }
400                }
401                "GovHydroFrancis.vc" => {
402                    match val {
403                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.vc = Some(v); } }
404                        crate::base::FieldValue::TextList(svs) => {
405                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.vc = Some(v); } }
406                        }
407                        _ => {}
408                    }
409                }
410                "GovHydroFrancis.waterTunnelSurgeChamberSimulation" => {
411                    match val {
412                        crate::base::FieldValue::Text(sv) => { obj.water_tunnel_surge_chamber_simulation = Some(sv.trim() == "true"); }
413                        crate::base::FieldValue::TextList(svs) => {
414                            if let Some(sv) = svs.last() { obj.water_tunnel_surge_chamber_simulation = Some(sv.trim() == "true"); }
415                        }
416                        _ => {}
417                    }
418                }
419                "GovHydroFrancis.zsfc" => {
420                    match val {
421                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.zsfc = Some(v); } }
422                        crate::base::FieldValue::TextList(svs) => {
423                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.zsfc = Some(v); } }
424                        }
425                        _ => {}
426                    }
427                }
428                "TurbineGovernorDynamics.AsynchronousMachineDynamics" => {
429                    if let crate::base::FieldValue::Resource(sv) = val {
430                        obj.base.asynchronous_machine_dynamics = Some(crate::base::MridRef { mrid: sv.clone() });
431                    }
432                }
433                "TurbineGovernorDynamics.SynchronousMachineDynamics" => {
434                    if let crate::base::FieldValue::Resource(sv) = val {
435                        obj.base.synchronous_machine_dynamics = Some(crate::base::MridRef { mrid: sv.clone() });
436                    }
437                }
438                "DynamicsFunctionBlock.enabled" => {
439                    match val {
440                        crate::base::FieldValue::Text(sv) => { obj.base.base.enabled = Some(sv.trim() == "true"); }
441                        crate::base::FieldValue::TextList(svs) => {
442                            if let Some(sv) = svs.last() { obj.base.base.enabled = Some(sv.trim() == "true"); }
443                        }
444                        _ => {}
445                    }
446                }
447                "IdentifiedObject.description" => {
448                    match val {
449                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.description = sv.clone(); }
450                        crate::base::FieldValue::TextList(svs) => {
451                            if let Some(sv) = svs.last() { obj.base.base.base.description = sv.clone(); }
452                        }
453                        _ => {}
454                    }
455                }
456                "IdentifiedObject.energyIdentCodeEic" => {
457                    match val {
458                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.energy_ident_code_eic = sv.clone(); }
459                        crate::base::FieldValue::TextList(svs) => {
460                            if let Some(sv) = svs.last() { obj.base.base.base.energy_ident_code_eic = sv.clone(); }
461                        }
462                        _ => {}
463                    }
464                }
465                "IdentifiedObject.mRID" => {
466                    match val {
467                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.m_rid = sv.clone(); }
468                        crate::base::FieldValue::TextList(svs) => {
469                            if let Some(sv) = svs.last() { obj.base.base.base.m_rid = sv.clone(); }
470                        }
471                        _ => {}
472                    }
473                }
474                "IdentifiedObject.name" => {
475                    match val {
476                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.name = sv.clone(); }
477                        crate::base::FieldValue::TextList(svs) => {
478                            if let Some(sv) = svs.last() { obj.base.base.base.name = sv.clone(); }
479                        }
480                        _ => {}
481                    }
482                }
483                "IdentifiedObject.shortName" => {
484                    match val {
485                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.short_name = sv.clone(); }
486                        crate::base::FieldValue::TextList(svs) => {
487                            if let Some(sv) = svs.last() { obj.base.base.base.short_name = sv.clone(); }
488                        }
489                        _ => {}
490                    }
491                }
492                _ => {}
493            }
494        }
495        obj
496    }
497}