use_chemical_formula/
hydrate_part.rs1use std::collections::BTreeMap;
2use std::fmt;
3
4use crate::{FormulaMultiplier, FormulaPart};
5
6#[derive(Clone, Debug, Eq, PartialEq)]
8pub struct HydratePart {
9 multiplier: FormulaMultiplier,
10 part: FormulaPart,
11}
12
13impl HydratePart {
14 #[must_use]
16 pub const fn new(multiplier: FormulaMultiplier, part: FormulaPart) -> Self {
17 Self { multiplier, part }
18 }
19
20 #[must_use]
22 pub const fn multiplier(&self) -> FormulaMultiplier {
23 self.multiplier
24 }
25
26 #[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}