digit_sequence/
result.rs

1use std::error::Error;
2use std::fmt::Display;
3
4/// The most generic [Error]-based [Result].
5pub type GenericResult<T> = Result<T, Box<dyn Error>>;
6
7/// Custom version of [Result], based on this [crate]'s [CrateError].
8pub type CrateResult<T> = Result<T, CrateError>;
9
10/// Custom error scenarios related to this [crate].
11#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
12pub enum CrateError {
13    /// When a character does not represent a 0-9 digit.
14    NonDigitChar(char),
15
16    /// When a number does not represent a 0-9 digit.
17    NonDigitNumber(u128),
18
19    /// When trying to convert a negative number.
20    NegativeNumber(i128),
21
22    /// When an operation causes a numeric overflow.
23    Overflow,
24}
25
26/// [CrateError] has a string representation.
27///
28/// ```
29/// use digit_sequence::*;
30///
31/// assert_eq!(CrateError::NonDigitNumber(90).to_string(), "Non-digit number: 90");
32/// assert_eq!(CrateError::NonDigitChar('X').to_string(), "Non-digit char: X");
33/// assert_eq!(CrateError::NegativeNumber(-90).to_string(), "Cannot convert negative number: -90");
34/// assert_eq!(CrateError::Overflow.to_string(), "Overflow");
35/// ```
36impl Display for CrateError {
37    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
38        match self {
39            Self::NonDigitChar(non_digit_char) => write!(f, "Non-digit char: {}", non_digit_char),
40
41            Self::NonDigitNumber(non_digit_number) => {
42                write!(f, "Non-digit number: {}", non_digit_number)
43            }
44
45            Self::NegativeNumber(number) => {
46                write!(f, "Cannot convert negative number: {}", number)
47            }
48
49            Self::Overflow => write!(f, "Overflow"),
50        }
51    }
52}
53
54impl Error for CrateError {}