mod display;
mod element_isotopes;
mod element_variant;
mod isotopic_composition;
mod mass_number;
mod monoisotopic_mass;
mod most_abundant_isotope;
mod relative_atomic_mass;
mod try_from;
mod try_from_element;
pub mod actinium;
pub mod aluminium;
pub mod americium;
pub mod antimony;
pub mod argon;
pub mod arsenic;
pub mod astatine;
pub mod barium;
pub mod berkelium;
pub mod beryllium;
pub mod bismuth;
pub mod bohrium;
pub mod boron;
pub mod bromine;
pub mod cadmium;
pub mod caesium;
pub mod calcium;
pub mod californium;
pub mod carbon;
pub mod cerium;
pub mod chlorine;
pub mod chromium;
pub mod cobalt;
pub mod copernicium;
pub mod copper;
pub mod curium;
pub mod darmstadtium;
pub mod dubnium;
pub mod dysprosium;
pub mod einsteinium;
pub mod erbium;
pub mod europium;
pub mod fermium;
pub mod flerovium;
pub mod fluorine;
pub mod francium;
pub mod gadolinium;
pub mod gallium;
pub mod germanium;
pub mod gold;
pub mod hafnium;
pub mod hassium;
pub mod helium;
pub mod holmium;
pub mod hydrogen;
pub mod indium;
pub mod iodine;
pub mod iridium;
pub mod iron;
pub mod krypton;
pub mod lanthanum;
pub mod lawrencium;
pub mod lead;
pub mod lithium;
pub mod livermorium;
pub mod lutetium;
pub mod magnesium;
pub mod manganese;
pub mod meitnerium;
pub mod mendelevium;
pub mod mercury;
pub mod molybdenum;
pub mod moscovium;
pub mod neodymium;
pub mod neon;
pub mod neptunium;
pub mod nickel;
pub mod nihonium;
pub mod niobium;
pub mod nitrogen;
pub mod nobelium;
pub mod oganesson;
pub mod osmium;
pub mod oxygen;
pub mod palladium;
pub mod phosphorus;
pub mod platinum;
pub mod plutonium;
pub mod polonium;
pub mod potassium;
pub mod praseodymium;
pub mod promethium;
pub mod protactinium;
pub mod radium;
pub mod radon;
pub mod rhenium;
pub mod rhodium;
pub mod roentgenium;
pub mod rubidium;
pub mod ruthenium;
pub mod rutherfordium;
pub mod samarium;
pub mod scandium;
pub mod seaborgium;
pub mod selenium;
pub mod silicon;
pub mod silver;
pub mod sodium;
pub mod strontium;
pub mod sulfur;
pub mod tantalum;
pub mod technetium;
pub mod tellurium;
pub mod tennessine;
pub mod terbium;
pub mod thallium;
pub mod thorium;
pub mod thulium;
pub mod tin;
pub mod titanium;
pub mod tungsten;
pub mod uranium;
pub mod vanadium;
pub mod xenon;
pub mod ytterbium;
pub mod yttrium;
pub mod zinc;
pub mod zirconium;
pub use actinium::ActiniumIsotope;
pub use aluminium::AluminiumIsotope;
pub use americium::AmericiumIsotope;
pub use antimony::AntimonyIsotope;
pub use argon::ArgonIsotope;
pub use arsenic::ArsenicIsotope;
pub use astatine::AstatineIsotope;
pub use barium::BariumIsotope;
pub use berkelium::BerkeliumIsotope;
pub use beryllium::BerylliumIsotope;
pub use bismuth::BismuthIsotope;
pub use bohrium::BohriumIsotope;
pub use boron::BoronIsotope;
pub use bromine::BromineIsotope;
pub use cadmium::CadmiumIsotope;
pub use caesium::CaesiumIsotope;
pub use calcium::CalciumIsotope;
pub use californium::CaliforniumIsotope;
pub use carbon::CarbonIsotope;
pub use cerium::CeriumIsotope;
pub use chlorine::ChlorineIsotope;
pub use chromium::ChromiumIsotope;
pub use cobalt::CobaltIsotope;
pub use copernicium::CoperniciumIsotope;
pub use copper::CopperIsotope;
pub use curium::CuriumIsotope;
pub use darmstadtium::DarmstadtiumIsotope;
pub use dubnium::DubniumIsotope;
pub use dysprosium::DysprosiumIsotope;
pub use einsteinium::EinsteiniumIsotope;
pub use erbium::ErbiumIsotope;
pub use europium::EuropiumIsotope;
pub use fermium::FermiumIsotope;
pub use flerovium::FleroviumIsotope;
pub use fluorine::FluorineIsotope;
pub use francium::FranciumIsotope;
pub use gadolinium::GadoliniumIsotope;
pub use gallium::GalliumIsotope;
pub use germanium::GermaniumIsotope;
pub use gold::GoldIsotope;
pub use hafnium::HafniumIsotope;
pub use hassium::HassiumIsotope;
pub use helium::HeliumIsotope;
pub use holmium::HolmiumIsotope;
pub use hydrogen::HydrogenIsotope;
pub use indium::IndiumIsotope;
pub use iodine::IodineIsotope;
pub use iridium::IridiumIsotope;
pub use iron::IronIsotope;
pub use krypton::KryptonIsotope;
pub use lanthanum::LanthanumIsotope;
pub use lawrencium::LawrenciumIsotope;
pub use lead::LeadIsotope;
pub use lithium::LithiumIsotope;
pub use livermorium::LivermoriumIsotope;
pub use lutetium::LutetiumIsotope;
pub use magnesium::MagnesiumIsotope;
pub use manganese::ManganeseIsotope;
pub use meitnerium::MeitneriumIsotope;
pub use mendelevium::MendeleviumIsotope;
pub use mercury::MercuryIsotope;
pub use molybdenum::MolybdenumIsotope;
pub use moscovium::MoscoviumIsotope;
pub use neodymium::NeodymiumIsotope;
pub use neon::NeonIsotope;
pub use neptunium::NeptuniumIsotope;
pub use nickel::NickelIsotope;
pub use nihonium::NihoniumIsotope;
pub use niobium::NiobiumIsotope;
pub use nitrogen::NitrogenIsotope;
pub use nobelium::NobeliumIsotope;
pub use oganesson::OganessonIsotope;
pub use osmium::OsmiumIsotope;
pub use oxygen::OxygenIsotope;
pub use palladium::PalladiumIsotope;
pub use phosphorus::PhosphorusIsotope;
pub use platinum::PlatinumIsotope;
pub use plutonium::PlutoniumIsotope;
pub use polonium::PoloniumIsotope;
pub use potassium::PotassiumIsotope;
pub use praseodymium::PraseodymiumIsotope;
pub use promethium::PromethiumIsotope;
pub use protactinium::ProtactiniumIsotope;
pub use radium::RadiumIsotope;
pub use radon::RadonIsotope;
pub use rhenium::RheniumIsotope;
pub use rhodium::RhodiumIsotope;
pub use roentgenium::RoentgeniumIsotope;
pub use rubidium::RubidiumIsotope;
pub use ruthenium::RutheniumIsotope;
pub use rutherfordium::RutherfordiumIsotope;
pub use samarium::SamariumIsotope;
pub use scandium::ScandiumIsotope;
pub use seaborgium::SeaborgiumIsotope;
pub use selenium::SeleniumIsotope;
pub use silicon::SiliconIsotope;
pub use silver::SilverIsotope;
pub use sodium::SodiumIsotope;
pub use strontium::StrontiumIsotope;
pub use sulfur::SulfurIsotope;
pub use tantalum::TantalumIsotope;
pub use technetium::TechnetiumIsotope;
pub use tellurium::TelluriumIsotope;
pub use tennessine::TennessineIsotope;
pub use terbium::TerbiumIsotope;
pub use thallium::ThalliumIsotope;
pub use thorium::ThoriumIsotope;
pub use thulium::ThuliumIsotope;
pub use tin::TinIsotope;
pub use titanium::TitaniumIsotope;
pub use tungsten::TungstenIsotope;
pub use uranium::UraniumIsotope;
pub use vanadium::VanadiumIsotope;
pub use xenon::XenonIsotope;
pub use ytterbium::YtterbiumIsotope;
pub use yttrium::YttriumIsotope;
pub use zinc::ZincIsotope;
pub use zirconium::ZirconiumIsotope;
pub trait RelativeAtomicMass {
fn relative_atomic_mass(&self) -> f64;
}
pub trait MassNumber {
fn mass_number(&self) -> u16;
}
pub trait ElementVariant {
fn element(&self) -> crate::Element;
}
pub trait IsotopicComposition {
fn isotopic_composition(&self) -> Option<f64>;
}
pub trait MostAbundantIsotope {
fn most_abundant_isotope() -> Self;
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
pub enum Isotope {
H(HydrogenIsotope),
He(HeliumIsotope),
Li(LithiumIsotope),
Be(BerylliumIsotope),
B(BoronIsotope),
C(CarbonIsotope),
N(NitrogenIsotope),
O(OxygenIsotope),
F(FluorineIsotope),
Ne(NeonIsotope),
Na(SodiumIsotope),
Mg(MagnesiumIsotope),
Al(AluminiumIsotope),
Si(SiliconIsotope),
P(PhosphorusIsotope),
S(SulfurIsotope),
Cl(ChlorineIsotope),
Ar(ArgonIsotope),
K(PotassiumIsotope),
Ca(CalciumIsotope),
Sc(ScandiumIsotope),
Ti(TitaniumIsotope),
V(VanadiumIsotope),
Cr(ChromiumIsotope),
Mn(ManganeseIsotope),
Fe(IronIsotope),
Co(CobaltIsotope),
Ni(NickelIsotope),
Cu(CopperIsotope),
Zn(ZincIsotope),
Ga(GalliumIsotope),
Ge(GermaniumIsotope),
As(ArsenicIsotope),
Se(SeleniumIsotope),
Br(BromineIsotope),
Kr(KryptonIsotope),
Rb(RubidiumIsotope),
Sr(StrontiumIsotope),
Y(YttriumIsotope),
Zr(ZirconiumIsotope),
Nb(NiobiumIsotope),
Mo(MolybdenumIsotope),
Tc(TechnetiumIsotope),
Ru(RutheniumIsotope),
Rh(RhodiumIsotope),
Pd(PalladiumIsotope),
Ag(SilverIsotope),
Cd(CadmiumIsotope),
In(IndiumIsotope),
Sn(TinIsotope),
Sb(AntimonyIsotope),
Te(TelluriumIsotope),
I(IodineIsotope),
Xe(XenonIsotope),
Cs(CaesiumIsotope),
Ba(BariumIsotope),
La(LanthanumIsotope),
Ce(CeriumIsotope),
Pr(PraseodymiumIsotope),
Nd(NeodymiumIsotope),
Pm(PromethiumIsotope),
Sm(SamariumIsotope),
Eu(EuropiumIsotope),
Gd(GadoliniumIsotope),
Tb(TerbiumIsotope),
Dy(DysprosiumIsotope),
Ho(HolmiumIsotope),
Er(ErbiumIsotope),
Tm(ThuliumIsotope),
Yb(YtterbiumIsotope),
Lu(LutetiumIsotope),
Hf(HafniumIsotope),
Ta(TantalumIsotope),
W(TungstenIsotope),
Re(RheniumIsotope),
Os(OsmiumIsotope),
Ir(IridiumIsotope),
Pt(PlatinumIsotope),
Au(GoldIsotope),
Hg(MercuryIsotope),
Tl(ThalliumIsotope),
Pb(LeadIsotope),
Bi(BismuthIsotope),
Po(PoloniumIsotope),
At(AstatineIsotope),
Rn(RadonIsotope),
Fr(FranciumIsotope),
Ra(RadiumIsotope),
Ac(ActiniumIsotope),
Th(ThoriumIsotope),
Pa(ProtactiniumIsotope),
U(UraniumIsotope),
Np(NeptuniumIsotope),
Pu(PlutoniumIsotope),
Am(AmericiumIsotope),
Cm(CuriumIsotope),
Bk(BerkeliumIsotope),
Cf(CaliforniumIsotope),
Es(EinsteiniumIsotope),
Fm(FermiumIsotope),
Md(MendeleviumIsotope),
No(NobeliumIsotope),
Lr(LawrenciumIsotope),
Rf(RutherfordiumIsotope),
Db(DubniumIsotope),
Sg(SeaborgiumIsotope),
Bh(BohriumIsotope),
Hs(HassiumIsotope),
Mt(MeitneriumIsotope),
Ds(DarmstadtiumIsotope),
Rg(RoentgeniumIsotope),
Cn(CoperniciumIsotope),
Nh(NihoniumIsotope),
Fl(FleroviumIsotope),
Mc(MoscoviumIsotope),
Lv(LivermoriumIsotope),
Ts(TennessineIsotope),
Og(OganessonIsotope),
}
impl IsotopicComposition for crate::Element {
#[inline]
fn isotopic_composition(&self) -> Option<f64> {
self.most_abundant_isotope().isotopic_composition()
}
}
impl RelativeAtomicMass for crate::Element {
#[inline]
fn relative_atomic_mass(&self) -> f64 {
self.most_abundant_isotope().relative_atomic_mass()
}
}
#[cfg(test)]
mod tests {
use crate::isotopes::{IsotopicComposition, RelativeAtomicMass};
#[test]
fn test_isotopic_composition() {
let hydrogen = crate::Element::H;
let isotopic_composition = hydrogen.isotopic_composition();
assert_eq!(isotopic_composition, Some(0.999885));
}
#[test]
fn test_relative_atomic_mass() {
let carbon = crate::Element::C;
let relative_atomic_mass = carbon.relative_atomic_mass();
assert!((relative_atomic_mass - 12.0).abs() < 0.0001);
}
}