tentacle_multiaddr/
error.rs

1use std::{error, fmt};
2use unsigned_varint::decode;
3
4#[derive(Debug)]
5pub enum Error {
6    DataLessThanLen,
7    InvalidMultiaddr,
8    InvalidOnion3Addr,
9    InvalidProtocolString,
10    InvalidUvar(decode::Error),
11    ParsingError(Box<dyn error::Error + Send + Sync>),
12    UnknownHash,
13    UnknownProtocolId(u32),
14    UnknownProtocolString,
15}
16
17impl fmt::Display for Error {
18    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
19        match self {
20            Error::DataLessThanLen => f.write_str("we have less data than indicated by length"),
21            Error::InvalidMultiaddr => f.write_str("invalid multiaddr"),
22            Error::InvalidProtocolString => f.write_str("invalid protocol string"),
23            Error::InvalidOnion3Addr => f.write_str("invalid onion3 address"),
24            Error::InvalidUvar(e) => write!(f, "failed to decode unsigned varint: {}", e),
25            Error::ParsingError(e) => write!(f, "failed to parse: {}", e),
26            Error::UnknownHash => write!(f, "unknown hash"),
27            Error::UnknownProtocolId(id) => write!(f, "unknown protocol id: {}", id),
28            Error::UnknownProtocolString => f.write_str("unknown protocol string"),
29        }
30    }
31}
32
33impl error::Error for Error {
34    #[inline]
35    fn cause(&self) -> Option<&dyn error::Error> {
36        if let Error::ParsingError(e) = self {
37            Some(&**e)
38        } else {
39            None
40        }
41    }
42}
43
44impl From<::std::io::Error> for Error {
45    fn from(err: ::std::io::Error) -> Error {
46        Error::ParsingError(err.into())
47    }
48}
49
50impl From<bs58::decode::Error> for Error {
51    fn from(err: bs58::decode::Error) -> Error {
52        Error::ParsingError(err.into())
53    }
54}
55
56impl From<::std::net::AddrParseError> for Error {
57    fn from(err: ::std::net::AddrParseError) -> Error {
58        Error::ParsingError(err.into())
59    }
60}
61
62impl From<::std::num::ParseIntError> for Error {
63    fn from(err: ::std::num::ParseIntError) -> Error {
64        Error::ParsingError(err.into())
65    }
66}
67
68impl From<::std::string::FromUtf8Error> for Error {
69    fn from(err: ::std::string::FromUtf8Error) -> Error {
70        Error::ParsingError(err.into())
71    }
72}
73
74impl From<::std::str::Utf8Error> for Error {
75    fn from(err: ::std::str::Utf8Error) -> Error {
76        Error::ParsingError(err.into())
77    }
78}
79
80impl From<unsigned_varint::decode::Error> for Error {
81    fn from(e: unsigned_varint::decode::Error) -> Error {
82        Error::InvalidUvar(e)
83    }
84}