Skip to main content

use_molecule/
molecular_formula.rs

1use std::fmt;
2
3use use_chemical_formula::ChemicalFormula;
4
5/// A molecule-facing chemical formula wrapper.
6#[derive(Clone, Debug, Eq, PartialEq)]
7pub struct MolecularFormula(ChemicalFormula);
8
9impl MolecularFormula {
10    /// Creates a molecular formula wrapper.
11    #[must_use]
12    pub const fn new(formula: ChemicalFormula) -> Self {
13        Self(formula)
14    }
15
16    /// Returns the wrapped formula.
17    #[must_use]
18    pub const fn as_formula(&self) -> &ChemicalFormula {
19        &self.0
20    }
21
22    /// Consumes the wrapper and returns the formula.
23    #[must_use]
24    pub fn into_formula(self) -> ChemicalFormula {
25        self.0
26    }
27}
28
29impl From<ChemicalFormula> for MolecularFormula {
30    fn from(value: ChemicalFormula) -> Self {
31        Self::new(value)
32    }
33}
34
35impl AsRef<ChemicalFormula> for MolecularFormula {
36    fn as_ref(&self) -> &ChemicalFormula {
37        self.as_formula()
38    }
39}
40
41impl fmt::Display for MolecularFormula {
42    fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
43        write!(formatter, "{}", self.0)
44    }
45}