Skip to main content

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}