Skip to main content

cimstructs/
StreetAddress.rs

1/// General purpose street and postal address information.
2#[derive(Debug, Default, Clone, serde::Serialize, serde::Deserialize)]
3pub struct StreetAddress {
4    pub id: String,
5    /// The language in which the address is specified, using ISO 639-1 two digit language code.
6    pub language: String,
7    /// Post office box.
8    pub po_box: String,
9    /// Postal code for the address.
10    pub postal_code: String,
11    /// Status of this address.
12    #[serde(skip_serializing_if = "Option::is_none")]
13    pub status: Option<super::base::MridRef>,
14    /// Street detail.
15    #[serde(skip_serializing_if = "Option::is_none")]
16    pub street_detail: Option<super::base::MridRef>,
17    /// Town detail.
18    #[serde(skip_serializing_if = "Option::is_none")]
19    pub town_detail: Option<super::base::MridRef>,
20}
21impl crate::base::CimElement for StreetAddress {
22    fn mrid(&self) -> &str { &self.id }
23    fn type_name(&self) -> &'static str { "StreetAddress" }
24    fn as_any(&self) -> &dyn std::any::Any { self }
25    fn to_json_value(&self) -> serde_json::Value {
26        serde_json::to_value(self).unwrap_or(serde_json::Value::Null)
27    }
28    fn to_block(&self) -> crate::base::RdfBlock {
29        let mut block = crate::base::RdfBlock {
30            type_name: "StreetAddress".to_string(),
31            mrid: self.id.clone(),
32            fields: std::collections::HashMap::new(),
33            duplicate_fields: std::collections::HashSet::new(),
34        };
35        if !self.language.is_empty() {
36            block.fields.insert("StreetAddress.language".into(), crate::base::FieldValue::Text(self.language.clone()));
37        }
38        if !self.po_box.is_empty() {
39            block.fields.insert("StreetAddress.poBox".into(), crate::base::FieldValue::Text(self.po_box.clone()));
40        }
41        if !self.postal_code.is_empty() {
42            block.fields.insert("StreetAddress.postalCode".into(), crate::base::FieldValue::Text(self.postal_code.clone()));
43        }
44        if let Some(ref v) = self.status {
45            block.fields.insert("StreetAddress.status".into(), crate::base::FieldValue::Resource(v.mrid.clone()));
46        }
47        if let Some(ref v) = self.street_detail {
48            block.fields.insert("StreetAddress.streetDetail".into(), crate::base::FieldValue::Resource(v.mrid.clone()));
49        }
50        if let Some(ref v) = self.town_detail {
51            block.fields.insert("StreetAddress.townDetail".into(), crate::base::FieldValue::Resource(v.mrid.clone()));
52        }
53        block
54    }
55}
56
57impl StreetAddress {
58    pub fn from_block(b: &crate::base::RdfBlock) -> Self {
59        let mut obj = Self::default();
60        obj.id.clone_from(&b.mrid);
61        for (key, val) in &b.fields {
62            match key.as_str() {
63                "StreetAddress.language" => {
64                    match val {
65                        crate::base::FieldValue::Text(sv) => { obj.language = sv.clone(); }
66                        crate::base::FieldValue::TextList(svs) => {
67                            if let Some(sv) = svs.last() { obj.language = sv.clone(); }
68                        }
69                        _ => {}
70                    }
71                }
72                "StreetAddress.poBox" => {
73                    match val {
74                        crate::base::FieldValue::Text(sv) => { obj.po_box = sv.clone(); }
75                        crate::base::FieldValue::TextList(svs) => {
76                            if let Some(sv) = svs.last() { obj.po_box = sv.clone(); }
77                        }
78                        _ => {}
79                    }
80                }
81                "StreetAddress.postalCode" => {
82                    match val {
83                        crate::base::FieldValue::Text(sv) => { obj.postal_code = sv.clone(); }
84                        crate::base::FieldValue::TextList(svs) => {
85                            if let Some(sv) = svs.last() { obj.postal_code = sv.clone(); }
86                        }
87                        _ => {}
88                    }
89                }
90                "StreetAddress.status" => {
91                    if let crate::base::FieldValue::Resource(sv) = val {
92                        obj.status = Some(crate::base::MridRef { mrid: sv.clone() });
93                    }
94                }
95                "StreetAddress.streetDetail" => {
96                    if let crate::base::FieldValue::Resource(sv) = val {
97                        obj.street_detail = Some(crate::base::MridRef { mrid: sv.clone() });
98                    }
99                }
100                "StreetAddress.townDetail" => {
101                    if let crate::base::FieldValue::Resource(sv) = val {
102                        obj.town_detail = Some(crate::base::MridRef { mrid: sv.clone() });
103                    }
104                }
105                _ => {}
106            }
107        }
108        obj
109    }
110}