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,
}
}
}