elements_rs 0.2.3

A comprehensive library for chemical elements and their isotopes with rich metadata
Documentation
//! Element names.

impl crate::Element {
    #[must_use]
    #[allow(clippy::too_many_lines)]
    /// Returns the full element name (e.g., "Carbon").
    ///
    /// # Examples
    ///
    /// ```rust
    /// use elements_rs::Element;
    ///
    /// assert_eq!(Element::H.name(), "Hydrogen");
    /// assert_eq!(Element::O.name(), "Oxygen");
    /// ```
    pub fn name(&self) -> &str {
        match self {
            Self::H => "Hydrogen",
            Self::He => "Helium",
            Self::Li => "Lithium",
            Self::Be => "Beryllium",
            Self::B => "Boron",
            Self::C => "Carbon",
            Self::N => "Nitrogen",
            Self::O => "Oxygen",
            Self::F => "Fluorine",
            Self::Ne => "Neon",
            Self::Na => "Sodium",
            Self::Mg => "Magnesium",
            Self::Al => "Aluminium",
            Self::Si => "Silicon",
            Self::P => "Phosphorus",
            Self::S => "Sulfur",
            Self::Cl => "Chlorine",
            Self::Ar => "Argon",
            Self::K => "Potassium",
            Self::Ca => "Calcium",
            Self::Sc => "Scandium",
            Self::Ti => "Titanium",
            Self::V => "Vanadium",
            Self::Cr => "Chromium",
            Self::Mn => "Manganese",
            Self::Fe => "Iron",
            Self::Co => "Cobalt",
            Self::Ni => "Nickel",
            Self::Cu => "Copper",
            Self::Zn => "Zinc",
            Self::Ga => "Gallium",
            Self::Ge => "Germanium",
            Self::As => "Arsenic",
            Self::Se => "Selenium",
            Self::Br => "Bromine",
            Self::Kr => "Krypton",
            Self::Rb => "Rubidium",
            Self::Sr => "Strontium",
            Self::Y => "Yttrium",
            Self::Zr => "Zirconium",
            Self::Nb => "Niobium",
            Self::Mo => "Molybdenum",
            Self::Tc => "Technetium",
            Self::Ru => "Ruthenium",
            Self::Rh => "Rhodium",
            Self::Pd => "Palladium",
            Self::Ag => "Silver",
            Self::Cd => "Cadmium",
            Self::In => "Indium",
            Self::Sn => "Tin",
            Self::Sb => "Antimony",
            Self::Te => "Tellurium",
            Self::I => "Iodine",
            Self::Xe => "Xenon",
            Self::Cs => "Caesium",
            Self::Ba => "Barium",
            Self::La => "Lanthanum",
            Self::Ce => "Cerium",
            Self::Pr => "Praseodymium",
            Self::Nd => "Neodymium",
            Self::Pm => "Promethium",
            Self::Sm => "Samarium",
            Self::Eu => "Europium",
            Self::Gd => "Gadolinium",
            Self::Tb => "Terbium",
            Self::Dy => "Dysprosium",
            Self::Ho => "Holmium",
            Self::Er => "Erbium",
            Self::Tm => "Thulium",
            Self::Yb => "Ytterbium",
            Self::Lu => "Lutetium",
            Self::Hf => "Hafnium",
            Self::Ta => "Tantalum",
            Self::W => "Tungsten",
            Self::Re => "Rhenium",
            Self::Os => "Osmium",
            Self::Ir => "Iridium",
            Self::Pt => "Platinum",
            Self::Au => "Gold",
            Self::Hg => "Mercury",
            Self::Tl => "Thallium",
            Self::Pb => "Lead",
            Self::Bi => "Bismuth",
            Self::Po => "Polonium",
            Self::At => "Astatine",
            Self::Rn => "Radon",
            Self::Fr => "Francium",
            Self::Ra => "Radium",
            Self::Ac => "Actinium",
            Self::Th => "Thorium",
            Self::Pa => "Protactinium",
            Self::U => "Uranium",
            Self::Np => "Neptunium",
            Self::Pu => "Plutonium",
            Self::Am => "Americium",
            Self::Cm => "Curium",
            Self::Bk => "Berkelium",
            Self::Cf => "Californium",
            Self::Es => "Einsteinium",
            Self::Fm => "Fermium",
            Self::Md => "Mendelevium",
            Self::No => "Nobelium",
            Self::Lr => "Lawrencium",
            Self::Rf => "Rutherfordium",
            Self::Db => "Dubnium",
            Self::Sg => "Seaborgium",
            Self::Bh => "Bohrium",
            Self::Hs => "Hassium",
            Self::Mt => "Meitnerium",
            Self::Ds => "Darmstadtium",
            Self::Rg => "Roentgenium",
            Self::Cn => "Copernicium",
            Self::Nh => "Nihonium",
            Self::Fl => "Flerovium",
            Self::Mc => "Moscovium",
            Self::Lv => "Livermorium",
            Self::Ts => "Tennessine",
            Self::Og => "Oganesson",
        }
    }
}

#[cfg(test)]
mod tests {
    use strum::IntoEnumIterator;

    #[test]
    fn test_name() {
        for element in crate::Element::iter() {
            let name = element.name();
            assert!(!name.is_empty(), "Name should not be empty for {element:?}");
            assert!(
                name.chars().next().unwrap().is_uppercase(),
                "Name should start with uppercase letter for {element:?}",
            );
        }
    }
}