unc_token/
error.rs

1#[derive(Debug, Clone, PartialEq, Eq)]
2pub enum UncTokenError {
3    InvalidTokensAmount(crate::utils::DecimalNumberParsingError),
4    InvalidTokenUnit(String),
5}
6
7impl std::fmt::Display for UncTokenError {
8    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
9        match self {
10            UncTokenError::InvalidTokensAmount(err) => write!(f, "invalid tokens amount: {}", err),
11            UncTokenError::InvalidTokenUnit(unit) => write!(f, "invalid token unit: {}", unit),
12        }
13    }
14}
15
16impl std::error::Error for UncTokenError {
17    fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
18        match self {
19            UncTokenError::InvalidTokensAmount(err) => Some(err),
20            UncTokenError::InvalidTokenUnit(_) => None,
21        }
22    }
23}
24
25#[cfg(test)]
26mod test {
27    use super::*;
28
29    #[test]
30    fn test_unc_token_error_display() {
31        assert_eq!(
32            format!(
33                "{}",
34                UncTokenError::InvalidTokensAmount(
35                    crate::utils::DecimalNumberParsingError::InvalidNumber("abc".to_owned())
36                )
37            ),
38            "invalid tokens amount: invalid number: abc"
39        );
40        assert_eq!(
41            format!(
42                "{}",
43                UncTokenError::InvalidTokensAmount(
44                    crate::utils::DecimalNumberParsingError::LongWhole("999999999999.0".to_owned())
45                )
46            ),
47            "invalid tokens amount: too long whole part: 999999999999.0"
48        );
49        assert_eq!(
50            format!(
51                "{}",
52                UncTokenError::InvalidTokensAmount(
53                    crate::utils::DecimalNumberParsingError::LongFractional(
54                        "0.999999999999".to_owned()
55                    )
56                )
57            ),
58            "invalid tokens amount: too long fractional part: 0.999999999999"
59        );
60        assert_eq!(
61            format!("{}", UncTokenError::InvalidTokenUnit("abc".to_owned())),
62            "invalid token unit: abc"
63        );
64    }
65}