elements_rs/lib.rs
1#![doc = include_str!("../README.md")]
2#![cfg_attr(not(feature = "arbitrary"), no_std)]
3
4#[cfg(test)]
5extern crate alloc;
6
7mod allowed_valences;
8mod as_ref;
9mod atomic_number;
10mod atomic_radius;
11mod bonds_number;
12mod charged_valences;
13mod classification;
14mod covalent_radius;
15mod display;
16mod electronegativity;
17mod element_mask;
18pub mod errors;
19mod from;
20mod from_str;
21pub mod isotopes;
22mod name;
23pub use element_mask::ElementMask;
24mod from_stream;
25mod orbitals;
26pub use orbitals::{AtomicOrbital, AtomicOrbitalType};
27mod oxidation_states;
28mod principal_quantum_number;
29mod standard_atomic_weight;
30mod symbol;
31mod try_from;
32mod valence_electrons;
33mod van_der_waals_radius;
34pub use allowed_valences::AllowedValences;
35pub use atomic_number::AtomicNumber;
36pub use atomic_radius::AtomicRadius;
37pub use bonds_number::BondsNumber;
38pub use charged_valences::ChargedValences;
39pub use classification::{ElementCategory, ElementClassification};
40pub use covalent_radius::CovalentRadius;
41pub use electronegativity::Electronegativity;
42pub use isotopes::{
43 ElementVariant, Isotope, IsotopicComposition, MassNumber, MostAbundantIsotope,
44 RelativeAtomicMass,
45};
46pub use orbitals::Orbitals;
47pub use oxidation_states::OxidationStates;
48pub use principal_quantum_number::PrincipalQuantumNumber;
49pub use valence_electrons::ValenceElectrons;
50pub use van_der_waals_radius::VanDerWaalsRadius;
51
52#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, strum_macros::EnumIter)]
53#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
54#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
55/// All 118 elements of the periodic table.
56///
57/// ```rust
58/// use elements_rs::Element;
59///
60/// let oxygen = Element::O;
61/// assert_eq!(oxygen.name(), "Oxygen");
62/// assert_eq!(oxygen.standard_atomic_weight(), 15.999);
63/// ```
64pub enum Element {
65 /// Hydrogen
66 H,
67 /// Helium
68 He,
69 /// Lithium
70 Li,
71 /// Beryllium
72 Be,
73 /// Boron
74 B,
75 /// Carbon
76 C,
77 /// Nitrogen
78 N,
79 /// Oxygen
80 O,
81 /// Fluorine
82 F,
83 /// Neon
84 Ne,
85 /// Sodium
86 Na,
87 /// Magnesium
88 Mg,
89 /// Aluminium
90 Al,
91 /// Silicon
92 Si,
93 /// Phosphorus
94 P,
95 /// Sulfur
96 S,
97 /// Chlorine
98 Cl,
99 /// Argon
100 Ar,
101 /// Potassium
102 K,
103 /// Calcium
104 Ca,
105 /// Scandium
106 Sc,
107 /// Titanium
108 Ti,
109 /// Vanadium
110 V,
111 /// Chromium
112 Cr,
113 /// Manganese
114 Mn,
115 /// Iron
116 Fe,
117 /// Cobalt
118 Co,
119 /// Nickel
120 Ni,
121 /// Copper
122 Cu,
123 /// Zinc
124 Zn,
125 /// Gallium
126 Ga,
127 /// Germanium
128 Ge,
129 /// Arsenic
130 As,
131 /// Selenium
132 Se,
133 /// Bromine
134 Br,
135 /// Krypton
136 Kr,
137 /// Rubidium
138 Rb,
139 /// Strontium
140 Sr,
141 /// Yttrium
142 Y,
143 /// Zirconium
144 Zr,
145 /// Niobium
146 Nb,
147 /// Molybdenum
148 Mo,
149 /// Technetium
150 Tc,
151 /// Ruthenium
152 Ru,
153 /// Rhodium
154 Rh,
155 /// Palladium
156 Pd,
157 /// Silver
158 Ag,
159 /// Cadmium
160 Cd,
161 /// Indium
162 In,
163 /// Tin
164 Sn,
165 /// Antimony
166 Sb,
167 /// Tellurium
168 Te,
169 /// Iodine
170 I,
171 /// Xenon
172 Xe,
173 /// Caesium
174 Cs,
175 /// Barium
176 Ba,
177 /// Lanthanum
178 La,
179 /// Cerium
180 Ce,
181 /// Praseodymium
182 Pr,
183 /// Neodymium
184 Nd,
185 /// Promethium
186 Pm,
187 /// Samarium
188 Sm,
189 /// Europium
190 Eu,
191 /// Gadolinium
192 Gd,
193 /// Terbium
194 Tb,
195 /// Dysprosium
196 Dy,
197 /// Holmium
198 Ho,
199 /// Erbium
200 Er,
201 /// Thulium
202 Tm,
203 /// Ytterbium
204 Yb,
205 /// Lutetium
206 Lu,
207 /// Hafnium
208 Hf,
209 /// Tantalum
210 Ta,
211 /// Tungsten
212 W,
213 /// Rhenium
214 Re,
215 /// Osmium
216 Os,
217 /// Iridium
218 Ir,
219 /// Platinum
220 Pt,
221 /// Gold
222 Au,
223 /// Mercury
224 Hg,
225 /// Thallium
226 Tl,
227 /// Lead
228 Pb,
229 /// Bismuth
230 Bi,
231 /// Polonium
232 Po,
233 /// Astatine
234 At,
235 /// Radon
236 Rn,
237 /// Francium
238 Fr,
239 /// Radium
240 Ra,
241 /// Actinium
242 Ac,
243 /// Thorium
244 Th,
245 /// Protactinium
246 Pa,
247 /// Uranium
248 U,
249 /// Neptunium
250 Np,
251 /// Plutonium
252 Pu,
253 /// Americium
254 Am,
255 /// Curium
256 Cm,
257 /// Berkelium
258 Bk,
259 /// Californium
260 Cf,
261 /// Einsteinium
262 Es,
263 /// Fermium
264 Fm,
265 /// Mendelevium
266 Md,
267 /// Nobelium
268 No,
269 /// Lawrencium
270 Lr,
271 /// Rutherfordium
272 Rf,
273 /// Dubnium
274 Db,
275 /// Seaborgium
276 Sg,
277 /// Bohrium
278 Bh,
279 /// Hassium
280 Hs,
281 /// Meitnerium
282 Mt,
283 /// Darmstadtium
284 Ds,
285 /// Roentgenium
286 Rg,
287 /// Copernicium
288 Cn,
289 /// Nihonium
290 Nh,
291 /// Flerovium
292 Fl,
293 /// Moscovium
294 Mc,
295 /// Livermorium
296 Lv,
297 /// Tennessine
298 Ts,
299 /// Oganesson
300 Og,
301}
302
303impl AsRef<Element> for Element {
304 fn as_ref(&self) -> &Element {
305 self
306 }
307}
308
309#[cfg(test)]
310mod tests {
311 use super::Element;
312
313 #[test]
314 fn test_as_ref_element() {
315 let element = Element::C;
316 let element_ref: &Element = element.as_ref();
317 assert_eq!(element_ref, &Element::C);
318 }
319}