chemistru_elements/
atomic.rs1use 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}