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}