Skip to main content

use_stoichiometry/
error.rs

1use std::error::Error;
2use std::fmt;
3
4/// Errors returned when constructing stoichiometry values.
5#[derive(Clone, Debug, Eq, PartialEq)]
6pub enum StoichiometryValidationError {
7    /// A stoichiometric coefficient is zero.
8    ZeroCoefficient,
9    /// A ratio denominator is zero.
10    ZeroRatioDenominator,
11    /// A limiting-reagent label is empty.
12    EmptyLimitingReagentLabel,
13    /// An excess-reagent label is empty.
14    EmptyExcessReagentLabel,
15    /// A yield value is not finite.
16    NonFiniteYield,
17    /// A yield value is negative.
18    NegativeYield,
19    /// A theoretical yield value is zero or negative.
20    NonPositiveTheoreticalYield,
21    /// A reactant entry was required.
22    ExpectedReactant,
23    /// A product entry was required.
24    ExpectedProduct,
25}
26
27impl fmt::Display for StoichiometryValidationError {
28    fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
29        match self {
30            Self::ZeroCoefficient => {
31                formatter.write_str("stoichiometric coefficient must be greater than zero")
32            },
33            Self::ZeroRatioDenominator => {
34                formatter.write_str("stoichiometric ratio denominator must be greater than zero")
35            },
36            Self::EmptyLimitingReagentLabel => {
37                formatter.write_str("limiting-reagent label must not be empty")
38            },
39            Self::EmptyExcessReagentLabel => {
40                formatter.write_str("excess-reagent label must not be empty")
41            },
42            Self::NonFiniteYield => formatter.write_str("yield value must be finite"),
43            Self::NegativeYield => formatter.write_str("yield value must not be negative"),
44            Self::NonPositiveTheoreticalYield => {
45                formatter.write_str("theoretical yield must be greater than zero")
46            },
47            Self::ExpectedReactant => formatter.write_str("reaction entry must be a reactant"),
48            Self::ExpectedProduct => formatter.write_str("reaction entry must be a product"),
49        }
50    }
51}
52
53impl Error for StoichiometryValidationError {}