#![doc = include_str!("../README.md")]
#![cfg_attr(not(any(feature = "arbitrary", feature = "std")), no_std)]
#[cfg(test)]
extern crate alloc;
mod allowed_valences;
mod as_ref;
mod atomic_number;
mod atomic_radius;
mod bonds_number;
mod charged_valences;
mod classification;
mod covalent_radius;
mod display;
mod electronegativity;
mod element_mask;
pub mod errors;
mod from;
mod from_str;
pub mod isotopes;
mod name;
pub use element_mask::ElementMask;
mod from_stream;
mod orbitals;
pub use orbitals::{AtomicOrbital, AtomicOrbitalType};
mod oxidation_states;
mod principal_quantum_number;
mod standard_atomic_weight;
mod symbol;
mod try_from;
mod valence_electrons;
mod van_der_waals_radius;
pub use allowed_valences::AllowedValences;
pub use atomic_number::AtomicNumber;
pub use atomic_radius::AtomicRadius;
pub use bonds_number::BondsNumber;
pub use charged_valences::ChargedValences;
pub use classification::{ElementCategory, ElementClassification};
pub use covalent_radius::CovalentRadius;
pub use electronegativity::Electronegativity;
pub use isotopes::{
ElementVariant, Isotope, IsotopicComposition, MassNumber, MostAbundantIsotope,
RelativeAtomicMass,
};
pub use orbitals::Orbitals;
pub use oxidation_states::OxidationStates;
pub use principal_quantum_number::PrincipalQuantumNumber;
pub use valence_electrons::ValenceElectrons;
pub use van_der_waals_radius::VanDerWaalsRadius;
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, strum_macros::EnumIter)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
#[cfg_attr(feature = "mem_size", derive(mem_dbg::MemSize))]
#[cfg_attr(feature = "mem_dbg", derive(mem_dbg::MemDbg))]
#[cfg_attr(feature = "mem_size", mem_size(flat))]
pub enum Element {
H,
He,
Li,
Be,
B,
C,
N,
O,
F,
Ne,
Na,
Mg,
Al,
Si,
P,
S,
Cl,
Ar,
K,
Ca,
Sc,
Ti,
V,
Cr,
Mn,
Fe,
Co,
Ni,
Cu,
Zn,
Ga,
Ge,
As,
Se,
Br,
Kr,
Rb,
Sr,
Y,
Zr,
Nb,
Mo,
Tc,
Ru,
Rh,
Pd,
Ag,
Cd,
In,
Sn,
Sb,
Te,
I,
Xe,
Cs,
Ba,
La,
Ce,
Pr,
Nd,
Pm,
Sm,
Eu,
Gd,
Tb,
Dy,
Ho,
Er,
Tm,
Yb,
Lu,
Hf,
Ta,
W,
Re,
Os,
Ir,
Pt,
Au,
Hg,
Tl,
Pb,
Bi,
Po,
At,
Rn,
Fr,
Ra,
Ac,
Th,
Pa,
U,
Np,
Pu,
Am,
Cm,
Bk,
Cf,
Es,
Fm,
Md,
No,
Lr,
Rf,
Db,
Sg,
Bh,
Hs,
Mt,
Ds,
Rg,
Cn,
Nh,
Fl,
Mc,
Lv,
Ts,
Og,
}
impl AsRef<Element> for Element {
fn as_ref(&self) -> &Element {
self
}
}
#[cfg(test)]
mod tests {
use super::Element;
#[test]
fn test_as_ref_element() {
let element = Element::C;
let element_ref: &Element = element.as_ref();
assert_eq!(element_ref, &Element::C);
}
#[cfg(feature = "mem_size")]
#[test]
fn test_mem_size_derives() {
use mem_dbg::{MemSize, SizeFlags};
let element = Element::C;
assert_eq!(element.mem_size(SizeFlags::empty()), core::mem::size_of_val(&element));
let isotope = crate::Isotope::C(crate::isotopes::CarbonIsotope::C12);
assert_eq!(isotope.mem_size(SizeFlags::empty()), core::mem::size_of_val(&isotope));
}
#[cfg(feature = "mem_dbg")]
#[test]
fn test_mem_dbg_derives() {
use mem_dbg::{DbgFlags, MemDbg};
let mut output = alloc::string::String::new();
Element::C.mem_dbg_on(&mut output, DbgFlags::default()).unwrap();
assert!(!output.is_empty());
}
}