fmi_schema/
traits.rs

1//! Common traits for FMI schema
2
3use crate::MajorVersion;
4
5pub trait DefaultExperiment {
6    fn start_time(&self) -> Option<f64>;
7    fn stop_time(&self) -> Option<f64>;
8    fn tolerance(&self) -> Option<f64>;
9    fn step_size(&self) -> Option<f64>;
10}
11
12pub trait FmiModelDescription {
13    /// Returns the model name
14    fn model_name(&self) -> &str;
15
16    /// Returns the FMI version as a string
17    fn version_string(&self) -> &str;
18
19    /// Returns the parsed FMI version as a semver::Version
20    fn version(&self) -> Result<semver::Version, crate::Error> {
21        lenient_semver::parse(self.version_string()).map_err(|e| e.owned().into())
22    }
23
24    /// Returns the parsed FMI version as a MajorVersion
25    fn major_version(&self) -> Result<MajorVersion, crate::Error> {
26        match self.version()? {
27            v if v.major == 1 => Ok(MajorVersion::FMI1),
28            v if v.major == 2 => Ok(MajorVersion::FMI2),
29            v if v.major == 3 => Ok(MajorVersion::FMI3),
30            v => panic!("Invalid version {}", v.major),
31        }
32    }
33}