1use 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 fn model_name(&self) -> &str;
15
16 fn version_string(&self) -> &str;
18
19 fn version(&self) -> Result<semver::Version, crate::Error> {
21 lenient_semver::parse(self.version_string()).map_err(|e| e.owned().into())
22 }
23
24 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}