1use std::error::Error;
2use std::fmt;
3
4#[derive(Clone, Debug, Eq, PartialEq)]
6pub enum MolarMassValidationError {
7 NonFiniteMolarMass,
9 NonPositiveMolarMass,
11 InvalidElementSymbol(String),
13 NonFiniteAtomicMass { symbol: String },
15 NonPositiveAtomicMass { symbol: String },
17 ZeroElementCount { symbol: String },
19 FormulaCountTooLarge { symbol: String, count: u64 },
21 MissingAtomicMass { symbol: String },
23}
24
25impl fmt::Display for MolarMassValidationError {
26 fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
27 match self {
28 Self::NonFiniteMolarMass => formatter.write_str("molar mass must be finite"),
29 Self::NonPositiveMolarMass => {
30 formatter.write_str("molar mass must be greater than zero")
31 },
32 Self::InvalidElementSymbol(symbol) => {
33 write!(formatter, "invalid element symbol: {symbol}")
34 },
35 Self::NonFiniteAtomicMass { symbol } => {
36 write!(formatter, "atomic mass for {symbol} must be finite")
37 },
38 Self::NonPositiveAtomicMass { symbol } => {
39 write!(
40 formatter,
41 "atomic mass for {symbol} must be greater than zero"
42 )
43 },
44 Self::ZeroElementCount { symbol } => {
45 write!(
46 formatter,
47 "element count for {symbol} must be greater than zero"
48 )
49 },
50 Self::FormulaCountTooLarge { symbol, count } => {
51 write!(
52 formatter,
53 "element count for {symbol} is too large: {count}"
54 )
55 },
56 Self::MissingAtomicMass { symbol } => {
57 write!(
58 formatter,
59 "missing atomic mass for element symbol: {symbol}"
60 )
61 },
62 }
63 }
64}
65
66impl Error for MolarMassValidationError {}