chemistru_elements/
atomic.rs

1use intentional::CastFrom;
2
3#[derive(Clone, Debug, PartialEq, PartialOrd)]
4pub struct AtomicData {
5    pub(crate) atomic_mass: f64,
6    pub(crate) atomic_number: u8,
7    pub(crate) mass_number: u16,
8}
9
10impl AtomicData {
11    #[must_use]
12    pub const fn proton_count(&self) -> u8 {
13        self.atomic_number
14    }
15
16    #[must_use]
17    pub fn neutron_count(&self) -> u8 {
18        CastFrom::from_cast(self.mass_number - u16::from(self.proton_count()))
19    }
20
21    #[must_use]
22    pub const fn atomic_mass(&self) -> f64 {
23        self.atomic_mass
24    }
25
26    #[must_use]
27    pub const fn nucleon_count(&self) -> u16 {
28        self.mass_number
29    }
30
31    #[must_use]
32    pub const fn new(atomic_mass: f64, atomic_number: u8, mass_number: u16) -> Self {
33        Self {
34            atomic_mass,
35            atomic_number,
36            mass_number,
37        }
38    }
39}