utomid_rs/
elements.rs

1use once_cell::sync::Lazy;
2use std::collections::HashMap;
3
4#[derive(Debug, Clone)]
5pub struct Element {
6    pub number: u8,
7    pub symbol: &'static str,
8    pub name: &'static str,
9    pub atomic_mass: f64,
10    pub valence: i8,
11}
12
13pub static ELEMENTS: Lazy<HashMap<u8, Element>> = Lazy::new(|| {
14    let mut m = HashMap::new();
15    m.insert(1, Element { number: 1, symbol: "H", name: "Hydrogen", atomic_mass: 1.008, valence: 1 });
16    m.insert(2, Element { number: 2, symbol: "He", name: "Helium", atomic_mass: 4.0026, valence: 2 });
17    m.insert(3, Element { number: 3, symbol: "Li", name: "Lithium", atomic_mass: 6.94, valence: 1 });
18    m.insert(4, Element { number: 4, symbol: "Be", name: "Beryllium", atomic_mass: 9.0122, valence: 2 });
19    m.insert(5, Element { number: 5, symbol: "B", name: "Boron", atomic_mass: 10.81, valence: 3 });
20    m.insert(6, Element { number: 6, symbol: "C", name: "Carbon", atomic_mass: 12.011, valence: 4 });
21    m.insert(7, Element { number: 7, symbol: "N", name: "Nitrogen", atomic_mass: 14.007, valence: 5 });
22    m.insert(8, Element { number: 8, symbol: "O", name: "Oxygen", atomic_mass: 15.999, valence: 6 });
23    m.insert(9, Element { number: 9, symbol: "F", name: "Fluorine", atomic_mass: 18.998, valence: 7 });
24    m.insert(10, Element { number: 10, symbol: "Ne", name: "Neon", atomic_mass: 20.180, valence: 8 });
25    m.insert(11, Element { number: 11, symbol: "Na", name: "Sodium", atomic_mass: 22.990, valence: 1 });
26    m.insert(12, Element { number: 12, symbol: "Mg", name: "Magnesium", atomic_mass: 24.305, valence: 2 });
27    m.insert(13, Element { number: 13, symbol: "Al", name: "Aluminum", atomic_mass: 26.982, valence: 3 });
28    m.insert(14, Element { number: 14, symbol: "Si", name: "Silicon", atomic_mass: 28.085, valence: 4 });
29    m.insert(15, Element { number: 15, symbol: "P", name: "Phosphorus", atomic_mass: 30.974, valence: 5 });
30    m.insert(16, Element { number: 16, symbol: "S", name: "Sulfur", atomic_mass: 32.06, valence: 6 });
31    m.insert(17, Element { number: 17, symbol: "Cl", name: "Chlorine", atomic_mass: 35.45, valence: 7 });
32    m.insert(18, Element { number: 18, symbol: "Ar", name: "Argon", atomic_mass: 39.948, valence: 8 });
33    m.insert(19, Element { number: 19, symbol: "K", name: "Potassium", atomic_mass: 39.098, valence: 1 });
34    m.insert(20, Element { number: 20, symbol: "Ca", name: "Calcium", atomic_mass: 40.078, valence: 2 });
35    m.insert(21, Element { number: 21, symbol: "Sc", name: "Scandium", atomic_mass: 44.956, valence: 2 });
36    m.insert(22, Element { number: 22, symbol: "Ti", name: "Titanium", atomic_mass: 47.867, valence: 2 });
37    m.insert(23, Element { number: 23, symbol: "V", name: "Vanadium", atomic_mass: 50.942, valence: 2 });
38    m.insert(24, Element { number: 24, symbol: "Cr", name: "Chromium", atomic_mass: 51.996, valence: 1 });
39    m.insert(25, Element { number: 25, symbol: "Mn", name: "Manganese", atomic_mass: 54.938, valence: 2 });
40    m.insert(26, Element { number: 26, symbol: "Fe", name: "Iron", atomic_mass: 55.845, valence: 2 });
41    m.insert(27, Element { number: 27, symbol: "Co", name: "Cobalt", atomic_mass: 58.933, valence: 2 });
42    m.insert(28, Element { number: 28, symbol: "Ni", name: "Nickel", atomic_mass: 58.693, valence: 2 });
43    m.insert(29, Element { number: 29, symbol: "Cu", name: "Copper", atomic_mass: 63.546, valence: 1 });
44    m.insert(30, Element { number: 30, symbol: "Zn", name: "Zinc", atomic_mass: 65.38, valence: 2 });
45    m.insert(31, Element { number: 31, symbol: "Ga", name: "Gallium", atomic_mass: 69.723, valence: 3 });
46    m.insert(32, Element { number: 32, symbol: "Ge", name: "Germanium", atomic_mass: 72.630, valence: 4 });
47    m.insert(33, Element { number: 33, symbol: "As", name: "Arsenic", atomic_mass: 74.922, valence: 5 });
48    m.insert(34, Element { number: 34, symbol: "Se", name: "Selenium", atomic_mass: 78.971, valence: 6 });
49    m.insert(35, Element { number: 35, symbol: "Br", name: "Bromine", atomic_mass: 79.904, valence: 7 });
50    m.insert(36, Element { number: 36, symbol: "Kr", name: "Krypton", atomic_mass: 83.798, valence: 8 });
51    m.insert(37, Element { number: 37, symbol: "Rb", name: "Rubidium", atomic_mass: 85.468, valence: 1 });
52    m.insert(38, Element { number: 38, symbol: "Sr", name: "Strontium", atomic_mass: 87.62, valence: 2 });
53    m.insert(39, Element { number: 39, symbol: "Y", name: "Yttrium", atomic_mass: 88.906, valence: 2 });
54    m.insert(40, Element { number: 40, symbol: "Zr", name: "Zirconium", atomic_mass: 91.224, valence: 2 });
55    m.insert(41, Element { number: 41, symbol: "Nb", name: "Niobium", atomic_mass: 92.906, valence: 1 });
56    m.insert(42, Element { number: 42, symbol: "Mo", name: "Molybdenum", atomic_mass: 95.95, valence: 1 });
57    m.insert(43, Element { number: 43, symbol: "Tc", name: "Technetium", atomic_mass: 98.0, valence: 1 });
58    m.insert(44, Element { number: 44, symbol: "Ru", name: "Ruthenium", atomic_mass: 101.07, valence: 1 });
59    m.insert(45, Element { number: 45, symbol: "Rh", name: "Rhodium", atomic_mass: 102.91, valence: 1 });
60    m.insert(46, Element { number: 46, symbol: "Pd", name: "Palladium", atomic_mass: 106.42, valence: 0 });
61    m.insert(47, Element { number: 47, symbol: "Ag", name: "Silver", atomic_mass: 107.87, valence: 1 });
62    m.insert(48, Element { number: 48, symbol: "Cd", name: "Cadmium", atomic_mass: 112.41, valence: 2 });
63    m.insert(49, Element { number: 49, symbol: "In", name: "Indium", atomic_mass: 114.82, valence: 3 });
64    m.insert(50, Element { number: 50, symbol: "Sn", name: "Tin", atomic_mass: 118.71, valence: 4 });
65    m.insert(51, Element { number: 51, symbol: "Sb", name: "Antimony", atomic_mass: 121.76, valence: 5 });
66    m.insert(52, Element { number: 52, symbol: "Te", name: "Tellurium", atomic_mass: 127.60, valence: 6 });
67    m.insert(53, Element { number: 53, symbol: "I", name: "Iodine", atomic_mass: 126.90, valence: 7 });
68    m.insert(54, Element { number: 54, symbol: "Xe", name: "Xenon", atomic_mass: 131.29, valence: 8 });
69    m.insert(55, Element { number: 55, symbol: "Cs", name: "Cesium", atomic_mass: 132.91, valence: 1 });
70    m.insert(56, Element { number: 56, symbol: "Ba", name: "Barium", atomic_mass: 137.33, valence: 2 });
71    m.insert(57, Element { number: 57, symbol: "La", name: "Lanthanum", atomic_mass: 138.91, valence: 3 });
72    m.insert(58, Element { number: 58, symbol: "Ce", name: "Cerium", atomic_mass: 140.12, valence: 4 });
73    m.insert(59, Element { number: 59, symbol: "Pr", name: "Praseodymium", atomic_mass: 140.91, valence: 3 });
74    m.insert(60, Element { number: 60, symbol: "Nd", name: "Neodymium", atomic_mass: 144.24, valence: 3 });
75    m.insert(61, Element { number: 61, symbol: "Pm", name: "Promethium", atomic_mass: 145.0, valence: 3 });
76    m.insert(62, Element { number: 62, symbol: "Sm", name: "Samarium", atomic_mass: 150.36, valence: 3 });
77    m.insert(63, Element { number: 63, symbol: "Eu", name: "Europium", atomic_mass: 151.96, valence: 2 });
78    m.insert(64, Element { number: 64, symbol: "Gd", name: "Gadolinium", atomic_mass: 157.25, valence: 3 });
79    m.insert(65, Element { number: 65, symbol: "Tb", name: "Terbium", atomic_mass: 158.93, valence: 3 });
80    m.insert(66, Element { number: 66, symbol: "Dy", name: "Dysprosium", atomic_mass: 162.50, valence: 3 });
81    m.insert(67, Element { number: 67, symbol: "Ho", name: "Holmium", atomic_mass: 164.93, valence: 3 });
82    m.insert(68, Element { number: 68, symbol: "Er", name: "Erbium", atomic_mass: 167.26, valence: 3 });
83    m.insert(69, Element { number: 69, symbol: "Tm", name: "Thulium", atomic_mass: 168.93, valence: 3 });
84    m.insert(70, Element { number: 70, symbol: "Yb", name: "Ytterbium", atomic_mass: 173.05, valence: 2 });
85    m.insert(71, Element { number: 71, symbol: "Lu", name: "Lutetium", atomic_mass: 174.97, valence: 3 });
86    m.insert(72, Element { number: 72, symbol: "Hf", name: "Hafnium", atomic_mass: 178.49, valence: 4 });
87    m.insert(73, Element { number: 73, symbol: "Ta", name: "Tantalum", atomic_mass: 180.95, valence: 5 });
88    m.insert(74, Element { number: 74, symbol: "W", name: "Tungsten", atomic_mass: 183.84, valence: 6 });
89    m.insert(75, Element { number: 75, symbol: "Re", name: "Rhenium", atomic_mass: 186.21, valence: 7 });
90    m.insert(76, Element { number: 76, symbol: "Os", name: "Osmium", atomic_mass: 190.23, valence: 8 });
91    m.insert(77, Element { number: 77, symbol: "Ir", name: "Iridium", atomic_mass: 192.22, valence: 9 });
92    m.insert(78, Element { number: 78, symbol: "Pt", name: "Platinum", atomic_mass: 195.08, valence: 10 });
93    m.insert(79, Element { number: 79, symbol: "Au", name: "Gold", atomic_mass: 196.97, valence: 1 });
94    m.insert(80, Element { number: 80, symbol: "Hg", name: "Mercury", atomic_mass: 200.59, valence: 2 });
95    m.insert(81, Element { number: 81, symbol: "Tl", name: "Thallium", atomic_mass: 204.38, valence: 3 });
96    m.insert(82, Element { number: 82, symbol: "Pb", name: "Lead", atomic_mass: 207.2, valence: 4 });
97    m.insert(83, Element { number: 83, symbol: "Bi", name: "Bismuth", atomic_mass: 208.98, valence: 5 });
98    m.insert(84, Element { number: 84, symbol: "Po", name: "Polonium", atomic_mass: 209.0, valence: 6 });
99    m.insert(85, Element { number: 85, symbol: "At", name: "Astatine", atomic_mass: 210.0, valence: 7 });
100    m.insert(86, Element { number: 86, symbol: "Rn", name: "Radon", atomic_mass: 222.0, valence: 8 });
101    m.insert(87, Element { number: 87, symbol: "Fr", name: "Francium", atomic_mass: 223.0, valence: 1 });
102    m.insert(88, Element { number: 88, symbol: "Ra", name: "Radium", atomic_mass: 226.0, valence: 2 });
103    m.insert(89, Element { number: 89, symbol: "Ac", name: "Actinium", atomic_mass: 227.0, valence: 3 });
104    m.insert(90, Element { number: 90, symbol: "Th", name: "Thorium", atomic_mass: 232.04, valence: 4 });
105    m.insert(91, Element { number: 91, symbol: "Pa", name: "Protactinium", atomic_mass: 231.04, valence: 5 });
106    m.insert(92, Element { number: 92, symbol: "U", name: "Uranium", atomic_mass: 238.03, valence: 6 });
107    m.insert(93, Element { number: 93, symbol: "Np", name: "Neptunium", atomic_mass: 237.0, valence: 5 });
108    m.insert(94, Element { number: 94, symbol: "Pu", name: "Plutonium", atomic_mass: 244.0, valence: 4 });
109    m.insert(95, Element { number: 95, symbol: "Am", name: "Americium", atomic_mass: 243.0, valence: 3 });
110    m.insert(96, Element { number: 96, symbol: "Cm", name: "Curium", atomic_mass: 247.0, valence: 2 });
111    m.insert(97, Element { number: 97, symbol: "Bk", name: "Berkelium", atomic_mass: 247.0, valence: 2 });
112    m.insert(98, Element { number: 98, symbol: "Cf", name: "Californium", atomic_mass: 251.0, valence: 2 });
113    m.insert(99, Element { number: 99, symbol: "Es", name: "Einsteinium", atomic_mass: 252.0, valence: 2 });
114    m.insert(100, Element { number: 100, symbol: "Fm", name: "Fermium", atomic_mass: 257.0, valence: 2 });
115    m.insert(101, Element { number: 101, symbol: "Md", name: "Mendelevium", atomic_mass: 258.0, valence: 2 });
116    m.insert(102, Element { number: 102, symbol: "No", name: "Nobelium", atomic_mass: 259.0, valence: 2 });
117    m.insert(103, Element { number: 103, symbol: "Lr", name: "Lawrencium", atomic_mass: 266.0, valence: 3 });
118    m.insert(104, Element { number: 104, symbol: "Rf", name: "Rutherfordium", atomic_mass: 267.0, valence: 4 });
119    m.insert(105, Element { number: 105, symbol: "Db", name: "Dubnium", atomic_mass: 270.0, valence: 5 });
120    m.insert(106, Element { number: 106, symbol: "Sg", name: "Seaborgium", atomic_mass: 271.0, valence: 6 });
121    m.insert(107, Element { number: 107, symbol: "Bh", name: "Bohrium", atomic_mass: 270.0, valence: 7 });
122    m.insert(108, Element { number: 108, symbol: "Hs", name: "Hassium", atomic_mass: 277.0, valence: 8 });
123    m.insert(109, Element { number: 109, symbol: "Mt", name: "Meitnerium", atomic_mass: 278.0, valence: 9 });
124    m.insert(110, Element { number: 110, symbol: "Ds", name: "Darmstadtium", atomic_mass: 281.0, valence: 10 });
125    m.insert(111, Element { number: 111, symbol: "Rg", name: "Roentgenium", atomic_mass: 282.0, valence: 11 });
126    m.insert(112, Element { number: 112, symbol: "Cn", name: "Copernicium", atomic_mass: 285.0, valence: 2 });
127    m.insert(113, Element { number: 113, symbol: "Nh", name: "Nihonium", atomic_mass: 286.0, valence: 3 });
128    m.insert(114, Element { number: 114, symbol: "Fl", name: "Flerovium", atomic_mass: 289.0, valence: 4 });
129    m.insert(115, Element { number: 115, symbol: "Mc", name: "Moscovium", atomic_mass: 290.0, valence: 5 });
130    m.insert(116, Element { number: 116, symbol: "Lv", name: "Livermorium", atomic_mass: 293.0, valence: 6 });
131    m.insert(117, Element { number: 117, symbol: "Ts", name: "Tennessine", atomic_mass: 294.0, valence: 7 });
132    m.insert(118, Element { number: 118, symbol: "Og", name: "Oganesson", atomic_mass: 294.0, valence: 8 });
133    m
134});
135
136pub fn get_element(id: u8) -> Option<&'static Element> {
137    ELEMENTS.get(&id)
138}