Skip to main content

use_chemical_formula/
hydrate_part.rs

1use std::collections::BTreeMap;
2use std::fmt;
3
4use crate::{FormulaMultiplier, FormulaPart};
5
6/// A dot-separated hydrate formula part.
7#[derive(Clone, Debug, Eq, PartialEq)]
8pub struct HydratePart {
9    multiplier: FormulaMultiplier,
10    part: FormulaPart,
11}
12
13impl HydratePart {
14    /// Creates a hydrate formula part.
15    #[must_use]
16    pub const fn new(multiplier: FormulaMultiplier, part: FormulaPart) -> Self {
17        Self { multiplier, part }
18    }
19
20    /// Returns the hydrate multiplier.
21    #[must_use]
22    pub const fn multiplier(&self) -> FormulaMultiplier {
23        self.multiplier
24    }
25
26    /// Returns the hydrate formula part.
27    #[must_use]
28    pub const fn part(&self) -> &FormulaPart {
29        &self.part
30    }
31
32    pub(crate) fn add_counts(&self, counts: &mut BTreeMap<String, u64>) {
33        self.part
34            .add_counts(counts, u64::from(self.multiplier.get()));
35    }
36}
37
38impl fmt::Display for HydratePart {
39    fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
40        if !self.multiplier.is_one() {
41            write!(formatter, "{}", self.multiplier)?;
42        }
43        write!(formatter, "{}", self.part)
44    }
45}