#![allow(unused)]
pub mod domain;
pub mod material;
pub use material::Material;
use schemars::JsonSchema;
use std::{collections::HashMap, str::FromStr};
use self::domain::Domain;
use compositional::CompositionalPhysics;
use serde::{Deserialize, Serialize};
mod compositional {
use crate::parse::quantity::*;
use std::collections::HashMap;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, PartialOrd, Serialize, Deserialize, JsonSchema)]
pub struct Component {
pub mass: MolarMass,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct CompositionalPhysics {
pub components: HashMap<String, Component>,
pub phases: Vec<String>,
}
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize, JsonSchema)]
pub struct Physics {
compositional: CompositionalPhysics,
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize, JsonSchema)]
pub struct GeoscienceModel {
pub physics: Physics,
pub domain: Domain,
#[serde(default)]
pub materials: HashMap<String, Option<Material>>,
}
impl FromStr for GeoscienceModel {
type Err = serde_yaml::Error;
fn from_str(s: &str) -> Result<Self, Self::Err> {
Self::from_yaml(s)
}
}
impl GeoscienceModel {
fn from_yaml(s: &str) -> Result<Self, serde_yaml::Error> {
Ok(serde_yaml::from_str(s)?)
}
}