Skip to main content

fmi_schema/
minimal.rs

1//! Minimal FMI definitions for determining FMI version.
2//!
3//! ```rust
4//! # use fmi_schema::{minimal::MinModelDescription, traits::FmiModelDescription};
5//! let xml = r#"<?xml version="1.0" encoding="UTF-8"?>
6//!     <fmiModelDescription fmiVersion="2.0" modelName="BouncingBall">
7//!     </fmiModelDescription>"#;
8//! let md: MinModelDescription = fmi_schema::deserialize(xml).unwrap();
9//! let version = md.version().unwrap();
10//! assert_eq!(version, semver::Version::new(2, 0, 0));
11//! ```
12
13use crate::traits::FmiModelDescription;
14
15/// A minimal model description that only contains the FMI version
16/// This is used to determine the FMI version of the FMU
17#[derive(Default, PartialEq, Debug, hard_xml::XmlRead, hard_xml::XmlWrite)]
18#[xml(tag = "fmiModelDescription")]
19pub struct MinModelDescription {
20    #[xml(attr = "fmiVersion")]
21    pub fmi_version: String,
22    #[xml(attr = "modelName")]
23    pub model_name: String,
24}
25
26impl FmiModelDescription for MinModelDescription {
27    fn model_name(&self) -> &str {
28        &self.model_name
29    }
30
31    fn version_string(&self) -> &str {
32        &self.fmi_version
33    }
34
35    fn deserialize(xml: &str) -> Result<Self, crate::Error> {
36        hard_xml::XmlRead::from_str(xml).map_err(crate::Error::XmlParse)
37    }
38
39    fn serialize(&self) -> Result<String, crate::Error> {
40        hard_xml::XmlWrite::to_string(self).map_err(crate::Error::XmlParse)
41    }
42}