use super::*;
use indexmap::IndexMap;
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EsmFile {
pub esm: String,
pub metadata: Metadata,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub index_sets: Option<IndexMap<String, IndexSet>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub coordinates: Option<IndexMap<String, Coordinate>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub solver: Option<Solver>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub expression_templates: Option<serde_json::Value>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub metaparameters: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub models: Option<IndexMap<String, Model>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reaction_systems: Option<IndexMap<String, ReactionSystem>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub data_sources: Option<IndexMap<String, DataSource>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub operators: Option<IndexMap<String, Operator>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub enums: Option<IndexMap<String, IndexMap<String, i64>>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub coupling: Option<Vec<CouplingEntry>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub coupling_roles: Option<IndexMap<String, CouplingRole>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub domain: Option<Domain>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub function_tables: Option<IndexMap<String, FunctionTable>>,
#[serde(default, skip)]
pub component_templates: Option<IndexMap<String, serde_json::Value>>,
#[serde(default, skip)]
pub coupling_import_base: Option<String>,
#[serde(default, skip)]
pub document_base: Option<String>,
}
impl Default for EsmFile {
fn default() -> Self {
EsmFile {
esm: crate::SCHEMA_VERSION.to_string(),
metadata: Metadata::default(),
index_sets: None,
coordinates: None,
solver: None,
expression_templates: None,
metaparameters: None,
models: None,
reaction_systems: None,
data_sources: None,
operators: None,
enums: None,
coupling: None,
coupling_roles: None,
domain: None,
function_tables: None,
component_templates: None,
coupling_import_base: None,
document_base: None,
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct FunctionTableAxis {
pub name: String,
pub values: Vec<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub units: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct FunctionTable {
pub axes: Vec<FunctionTableAxis>,
pub data: serde_json::Value,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub interpolation: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub out_of_bounds: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub outputs: Option<Vec<String>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub shape: Option<Vec<u64>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub schema_version: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Reference {
#[serde(skip_serializing_if = "Option::is_none")]
pub doi: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub citation: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub notes: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct Metadata {
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub authors: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub license: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub created: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub modified: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tags: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub references: Option<Vec<Reference>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub system_class: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub dae_info: Option<DaeInfo>,
#[serde(skip_serializing_if = "Option::is_none")]
pub discretized_from: Option<DiscretizedFrom>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub x_esd: Option<serde_json::Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq)]
pub struct DiscretizedFrom {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq)]
pub struct DaeInfo {
pub algebraic_equation_count: usize,
pub per_model: HashMap<String, usize>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub factored_equation_count: Option<usize>,
}