cimstructs/
PositionPoint.rs1#[derive(Debug, Default, Clone, serde::Serialize, serde::Deserialize)]
3pub struct PositionPoint {
4 pub id: String,
5 #[serde(skip_serializing_if = "Option::is_none")]
7 pub location: Option<super::base::MridRef>,
8 #[serde(skip_serializing_if = "Option::is_none")]
10 pub sequence_number: Option<i64>,
11 pub x_position: String,
13 pub y_position: String,
15 pub z_position: String,
17}
18impl crate::base::CimElement for PositionPoint {
19 fn mrid(&self) -> &str { &self.id }
20 fn type_name(&self) -> &'static str { "PositionPoint" }
21 fn as_any(&self) -> &dyn std::any::Any { self }
22 fn to_json_value(&self) -> serde_json::Value {
23 serde_json::to_value(self).unwrap_or(serde_json::Value::Null)
24 }
25 fn to_block(&self) -> crate::base::RdfBlock {
26 let mut block = crate::base::RdfBlock {
27 type_name: "PositionPoint".to_string(),
28 mrid: self.id.clone(),
29 fields: std::collections::HashMap::new(),
30 duplicate_fields: std::collections::HashSet::new(),
31 };
32 if let Some(ref v) = self.location {
33 block.fields.insert("PositionPoint.Location".into(), crate::base::FieldValue::Resource(v.mrid.clone()));
34 }
35 if let Some(v) = self.sequence_number {
36 block.fields.insert("PositionPoint.sequenceNumber".into(), crate::base::FieldValue::Text(v.to_string()));
37 }
38 if !self.x_position.is_empty() {
39 block.fields.insert("PositionPoint.xPosition".into(), crate::base::FieldValue::Text(self.x_position.clone()));
40 }
41 if !self.y_position.is_empty() {
42 block.fields.insert("PositionPoint.yPosition".into(), crate::base::FieldValue::Text(self.y_position.clone()));
43 }
44 if !self.z_position.is_empty() {
45 block.fields.insert("PositionPoint.zPosition".into(), crate::base::FieldValue::Text(self.z_position.clone()));
46 }
47 block
48 }
49}
50
51impl PositionPoint {
52 pub fn from_block(b: &crate::base::RdfBlock) -> Self {
53 let mut obj = Self::default();
54 obj.id.clone_from(&b.mrid);
55 for (key, val) in &b.fields {
56 match key.as_str() {
57 "PositionPoint.Location" => {
58 if let crate::base::FieldValue::Resource(sv) = val {
59 obj.location = Some(crate::base::MridRef { mrid: sv.clone() });
60 }
61 }
62 "PositionPoint.sequenceNumber" => {
63 match val {
64 crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.sequence_number = Some(v); } }
65 crate::base::FieldValue::TextList(svs) => {
66 if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.sequence_number = Some(v); } }
67 }
68 _ => {}
69 }
70 }
71 "PositionPoint.xPosition" => {
72 match val {
73 crate::base::FieldValue::Text(sv) => { obj.x_position = sv.clone(); }
74 crate::base::FieldValue::TextList(svs) => {
75 if let Some(sv) = svs.last() { obj.x_position = sv.clone(); }
76 }
77 _ => {}
78 }
79 }
80 "PositionPoint.yPosition" => {
81 match val {
82 crate::base::FieldValue::Text(sv) => { obj.y_position = sv.clone(); }
83 crate::base::FieldValue::TextList(svs) => {
84 if let Some(sv) = svs.last() { obj.y_position = sv.clone(); }
85 }
86 _ => {}
87 }
88 }
89 "PositionPoint.zPosition" => {
90 match val {
91 crate::base::FieldValue::Text(sv) => { obj.z_position = sv.clone(); }
92 crate::base::FieldValue::TextList(svs) => {
93 if let Some(sv) = svs.last() { obj.z_position = sv.clone(); }
94 }
95 _ => {}
96 }
97 }
98 _ => {}
99 }
100 }
101 obj
102 }
103}