Skip to main content

egml_io/basic/
measure.rs

1use egml_core::model::basic::Measure;
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
5pub struct GmlMeasure {
6    #[serde(rename = "@uom")]
7    pub uom: String,
8    #[serde(rename = "$value")]
9    pub value: f64,
10}
11
12impl From<GmlMeasure> for Measure {
13    fn from(item: GmlMeasure) -> Self {
14        Self {
15            uom: item.uom,
16            value: item.value,
17        }
18    }
19}
20
21#[cfg(test)]
22mod tests {
23    use super::*;
24    use quick_xml::de;
25
26    #[test]
27    fn deserialize_measure() {
28        let xml_document = b"
29          <gen:value uom=\"m2\">120.0</gen:value>";
30
31        let gml_measure: GmlMeasure = de::from_reader(xml_document.as_ref()).expect("should work");
32        let measure = Measure::from(gml_measure);
33
34        assert_eq!(measure.uom, "m2");
35        assert_eq!(measure.value, 120.0);
36    }
37}