#[cfg_attr(coverage_nightly, coverage(off))]
mod export;
mod instance;
mod traits;
mod types;
mod variable_builder;
use std::{fmt::Display, str::FromStr};
pub use instance::{ModelInstance, context::BasicContext};
pub use traits::{
CSDoStepResult, Context, Fmi3CoSimulation, Fmi3Common, Fmi3ModelExchange,
Fmi3ScheduledExecution, Model, ModelGetSet, ModelGetSetStates, ModelLoggingCategory,
ModelMetadata, TerminalProvider, UserModel,
};
pub use types::{Binary, Clock, InitializeFromStart};
pub use variable_builder::{FmiVariableBuilder, VariableBuilder};
#[derive(Debug)]
pub enum ModelState {
StartAndEnd,
ConfigurationMode,
Instantiated,
InitializationMode,
EventMode,
ContinuousTimeMode,
StepMode,
ClockActivationMode,
StepDiscarded,
ReconfigurationMode,
IntermediateUpdateMode,
Terminated,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Default)]
pub enum DefaultLoggingCategory {
#[default]
LogAll,
Trace,
}
impl Display for DefaultLoggingCategory {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
DefaultLoggingCategory::LogAll => f.write_str("logAll"),
DefaultLoggingCategory::Trace => f.write_str("trace"),
}
}
}
impl FromStr for DefaultLoggingCategory {
type Err = String;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
"logAll" => Ok(Self::LogAll),
"trace" => Ok(Self::Trace),
_ => Err(format!("Unknown logging category: {}", s)),
}
}
}
impl ModelLoggingCategory for DefaultLoggingCategory {
fn all_categories() -> impl Iterator<Item = Self> {
[Self::LogAll, Self::Trace].into_iter()
}
fn trace_category() -> Self {
Self::Trace
}
fn error_category() -> Self {
Self::LogAll
}
}