sciforge-lib 0.0.4

Scientific computing library — mathematics, physics, chemistry, biology, astronomy, geology, meteorology.
Documentation
pub mod gas;
pub mod liquid;
pub mod plasma;
pub mod solid;

use crate::constants::chemistry::molecules::Molecule;
use gas::{Gas, GasFamily};
use liquid::{Liquid, LiquidFamily};
use solid::{Solid, SolidFamily};

#[derive(Debug, Clone)]
pub enum Material {
    Gas(Gas),
    Liquid(Liquid),
    Solid(Solid),
}

pub fn from_molecule(molecule: &Molecule) -> Option<Material> {
    match molecule.state_at_stp {
        "gas" => Gas::from_molecule(molecule, GasFamily::Process).map(Material::Gas),
        "liquid" => Liquid::from_molecule(molecule, LiquidFamily::Water).map(Material::Liquid),
        "solid" => Solid::from_molecule(molecule, SolidFamily::Ceramic).map(Material::Solid),
        _ => None,
    }
}

pub fn from_formula(formula: &str) -> Option<Material> {
    from_molecule(crate::constants::chemistry::molecules::by_formula(formula)?)
}