chemp 0.9.6

chemical formulas parser
Documentation
use crate::chemistry::ChemicalElement as Element;
use std::collections::HashMap;

#[derive(Clone, Debug)]
pub struct Table<'a> {
    elements: HashMap<&'a str, Element>,
}

impl<'a> Table<'a> {
    pub fn new() -> Self {
        let table = Self {
            elements: HashMap::from([
                (Element::Hydrogen.symbol(), Element::Hydrogen),
                (Element::Helium.symbol(), Element::Helium),
                (Element::Lithium.symbol(), Element::Lithium),
                (Element::Beryllium.symbol(), Element::Beryllium),
                (Element::Boron.symbol(), Element::Boron),
                (Element::Carbon.symbol(), Element::Carbon),
                (Element::Nitrogen.symbol(), Element::Nitrogen),
                (Element::Oxygen.symbol(), Element::Oxygen),
                (Element::Fluorine.symbol(), Element::Fluorine),
                (Element::Neon.symbol(), Element::Neon),
                (Element::Sodium.symbol(), Element::Sodium),
                (Element::Magnesium.symbol(), Element::Magnesium),
                (Element::Aluminium.symbol(), Element::Aluminium),
                (Element::Silicon.symbol(), Element::Silicon),
                (Element::Phosphorus.symbol(), Element::Phosphorus),
                (Element::Sulfur.symbol(), Element::Sulfur),
                (Element::Chlorine.symbol(), Element::Chlorine),
                (Element::Argon.symbol(), Element::Argon),
                (Element::Potassium.symbol(), Element::Potassium),
                (Element::Calcium.symbol(), Element::Calcium),
                (Element::Scandium.symbol(), Element::Scandium),
                (Element::Titanium.symbol(), Element::Titanium),
                (Element::Vanadium.symbol(), Element::Vanadium),
                (Element::Chromium.symbol(), Element::Chromium),
                (Element::Manganese.symbol(), Element::Manganese),
                (Element::Iron.symbol(), Element::Iron),
                (Element::Cobalt.symbol(), Element::Cobalt),
                (Element::Nickel.symbol(), Element::Nickel),
                (Element::Copper.symbol(), Element::Copper),
                (Element::Zinc.symbol(), Element::Zinc),
                (Element::Gallium.symbol(), Element::Gallium),
                (Element::Germanium.symbol(), Element::Germanium),
                (Element::Arsenic.symbol(), Element::Arsenic),
                (Element::Selenium.symbol(), Element::Selenium),
                (Element::Bromine.symbol(), Element::Bromine),
                (Element::Krypton.symbol(), Element::Krypton),
                (Element::Rubidium.symbol(), Element::Rubidium),
                (Element::Strontium.symbol(), Element::Strontium),
                (Element::Yttrium.symbol(), Element::Yttrium),
                (Element::Zirconium.symbol(), Element::Zirconium),
                (Element::Niobium.symbol(), Element::Niobium),
                (Element::Molybdenum.symbol(), Element::Molybdenum),
                (Element::Technetium.symbol(), Element::Technetium),
                (Element::Ruthenium.symbol(), Element::Ruthenium),
                (Element::Rhodium.symbol(), Element::Rhodium),
                (Element::Palladium.symbol(), Element::Palladium),
                (Element::Silver.symbol(), Element::Silver),
                (Element::Cadmium.symbol(), Element::Cadmium),
                (Element::Indium.symbol(), Element::Indium),
                (Element::Tin.symbol(), Element::Tin),
                (Element::Antimony.symbol(), Element::Antimony),
                (Element::Tellurium.symbol(), Element::Tellurium),
                (Element::Iodine.symbol(), Element::Iodine),
                (Element::Xenon.symbol(), Element::Xenon),
                (Element::Caesium.symbol(), Element::Caesium),
                (Element::Barium.symbol(), Element::Barium),
                (Element::Lanthanum.symbol(), Element::Lanthanum),
                (Element::Cerium.symbol(), Element::Cerium),
                (Element::Praseodymium.symbol(), Element::Praseodymium),
                (Element::Neodymium.symbol(), Element::Neodymium),
                (Element::Promethium.symbol(), Element::Promethium),
                (Element::Samarium.symbol(), Element::Samarium),
                (Element::Europium.symbol(), Element::Europium),
                (Element::Gadolinium.symbol(), Element::Gadolinium),
                (Element::Terbium.symbol(), Element::Terbium),
                (Element::Dysprosium.symbol(), Element::Dysprosium),
                (Element::Holmium.symbol(), Element::Holmium),
                (Element::Erbium.symbol(), Element::Erbium),
                (Element::Thulium.symbol(), Element::Thulium),
                (Element::Ytterbium.symbol(), Element::Ytterbium),
                (Element::Lutetium.symbol(), Element::Lutetium),
                (Element::Hafnium.symbol(), Element::Hafnium),
                (Element::Tantalum.symbol(), Element::Tantalum),
                (Element::Tungsten.symbol(), Element::Tungsten),
                (Element::Rhenium.symbol(), Element::Rhenium),
                (Element::Osmium.symbol(), Element::Osmium),
                (Element::Iridium.symbol(), Element::Iridium),
                (Element::Platinum.symbol(), Element::Platinum),
                (Element::Gold.symbol(), Element::Gold),
                (Element::Mercury.symbol(), Element::Mercury),
                (Element::Thallium.symbol(), Element::Thallium),
                (Element::Lead.symbol(), Element::Lead),
                (Element::Bismuth.symbol(), Element::Bismuth),
                (Element::Polonium.symbol(), Element::Polonium),
                (Element::Astatine.symbol(), Element::Astatine),
                (Element::Radon.symbol(), Element::Radon),
                (Element::Francium.symbol(), Element::Francium),
                (Element::Radium.symbol(), Element::Radium),
                (Element::Actinium.symbol(), Element::Actinium),
                (Element::Thorium.symbol(), Element::Thorium),
                (Element::Protactinium.symbol(), Element::Protactinium),
                (Element::Uranium.symbol(), Element::Uranium),
                (Element::Neptunium.symbol(), Element::Neptunium),
                (Element::Plutonium.symbol(), Element::Plutonium),
                (Element::Americium.symbol(), Element::Americium),
                (Element::Curium.symbol(), Element::Curium),
                (Element::Berkelium.symbol(), Element::Berkelium),
                (Element::Californium.symbol(), Element::Californium),
                (Element::Einsteinium.symbol(), Element::Einsteinium),
                (Element::Fermium.symbol(), Element::Fermium),
                (Element::Mendelevium.symbol(), Element::Mendelevium),
                (Element::Nobelium.symbol(), Element::Nobelium),
                (Element::Lawrencium.symbol(), Element::Lawrencium),
                (Element::Rutherfordium.symbol(), Element::Rutherfordium),
                (Element::Dubnium.symbol(), Element::Dubnium),
                (Element::Seaborgium.symbol(), Element::Seaborgium),
                (Element::Bohrium.symbol(), Element::Bohrium),
                (Element::Hassium.symbol(), Element::Hassium),
                (Element::Meitnerium.symbol(), Element::Meitnerium),
                (Element::Darmstadtium.symbol(), Element::Darmstadtium),
                (Element::Roentgenium.symbol(), Element::Roentgenium),
                (Element::Copernicium.symbol(), Element::Copernicium),
                (Element::Nihonium.symbol(), Element::Nihonium),
                (Element::Flerovium.symbol(), Element::Flerovium),
                (Element::Moscovium.symbol(), Element::Moscovium),
                (Element::Livermorium.symbol(), Element::Livermorium),
                (Element::Tennessine.symbol(), Element::Tennessine),
                (Element::Oganesson.symbol(), Element::Oganesson),
            ]),
        };

        table
    }

    pub fn lookup(&self, symbol: &str) -> Option<Element> {
        match self.elements.get(symbol) {
            Some(element) => Some(*element),
            None => None,
        }
    }
}