earth_codec/
base58_errors.rs

1use std::{error::Error, fmt};
2
3/// Error concerning encoding/decoding of base58 addresses
4#[derive(Debug, PartialEq, Eq, Clone)]
5pub enum Base58Error {
6    /// Unexpected character (char)
7    InvalidChar(char),
8    /// Checksum failed (expected, actual)
9    ChecksumFailed { expected: Vec<u8>, actual: Vec<u8> },
10    /// Invalid length (length)
11    InvalidLength(usize),
12    /// Version byte was not recognized
13    InvalidVersion(u8),
14}
15
16impl fmt::Display for Base58Error {
17    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
18        match self {
19            Base58Error::InvalidChar(b) => write!(f, "invalid char ({})", b),
20            Base58Error::ChecksumFailed { expected, actual } => write!(
21                f,
22                "invalid checksum (actual {:?} does not match expected {:?})",
23                actual, expected
24            ),
25            Base58Error::InvalidLength(length) => write!(f, "invalid length ({})", length),
26            Base58Error::InvalidVersion(v) => write!(f, "invalid version byte ({})", v),
27        }
28    }
29}
30
31impl Error for Base58Error {
32    fn cause(&self) -> Option<&dyn Error> {
33        None
34    }
35    fn description(&self) -> &str {
36        match *self {
37            Base58Error::InvalidChar(_) => "invalid char",
38            Base58Error::ChecksumFailed { .. } => "invalid checksum",
39            Base58Error::InvalidLength(_) => "invalid length",
40            Base58Error::InvalidVersion(_) => "invalid version",
41        }
42    }
43}