fmi_schema/
lib.rs

1#![doc=include_str!( "../README.md")]
2//! ## Feature flags
3#![doc = document_features::document_features!()]
4#![deny(unsafe_code)]
5#![deny(clippy::all)]
6
7use std::fmt::Display;
8
9use thiserror::Error;
10
11pub mod date_time;
12#[cfg(feature = "fmi2")]
13pub mod fmi2;
14#[cfg(feature = "fmi3")]
15pub mod fmi3;
16pub mod minimal;
17pub mod traits;
18pub mod variable_counts;
19
20/// The major version of the FMI standard
21#[derive(Debug, PartialEq, Eq)]
22pub enum MajorVersion {
23    FMI1,
24    FMI2,
25    FMI3,
26}
27
28impl Display for MajorVersion {
29    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
30        match self {
31            MajorVersion::FMI1 => write!(f, "1.0"),
32            MajorVersion::FMI2 => write!(f, "2.0"),
33            MajorVersion::FMI3 => write!(f, "3.0"),
34        }
35    }
36}
37
38#[derive(Debug, Error, PartialEq, Eq)]
39pub enum Error {
40    #[error("Variable {0} not found")]
41    VariableNotFound(String),
42
43    #[error(transparent)]
44    Semver(#[from] lenient_semver::parser::OwnedError),
45
46    #[error("Error parsing XML: {0}")]
47    XmlParse(String),
48
49    #[error("Error in model: {0}")]
50    Model(String),
51}
52
53/// A helper function to provide a default value for types that implement `Default`.
54/// This is used in the schema definitions to provide default values for fields.
55#[inline]
56fn default_wrapper<T: Default>() -> T {
57    T::default()
58}