susy_multiaddr/
errors.rs

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