parity_multiaddr/
errors.rs1use std::{net, fmt, error, io, num, str, string};
2use unsigned_varint::decode;
3
4pub type Result<T> = ::std::result::Result<T, Error>;
5
6#[derive(Debug)]
8#[non_exhaustive]
9pub enum Error {
10 DataLessThanLen,
11 InvalidMultiaddr,
12 InvalidProtocolString,
13 InvalidUvar(decode::Error),
14 ParsingError(Box<dyn error::Error + Send + Sync>),
15 UnknownProtocolId(u32),
16 UnknownProtocolString(String),
17}
18
19impl fmt::Display for Error {
20 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
21 match self {
22 Error::DataLessThanLen => f.write_str("we have less data than indicated by length"),
23 Error::InvalidMultiaddr => f.write_str("invalid multiaddr"),
24 Error::InvalidProtocolString => f.write_str("invalid protocol string"),
25 Error::InvalidUvar(e) => write!(f, "failed to decode unsigned varint: {}", e),
26 Error::ParsingError(e) => write!(f, "failed to parse: {}", e),
27 Error::UnknownProtocolId(id) => write!(f, "unknown protocol id: {}", id),
28 Error::UnknownProtocolString(string) => write!(f, "unknown protocol string: {}", 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<io::Error> for Error {
45 fn from(err: io::Error) -> Error {
46 Error::ParsingError(err.into())
47 }
48}
49
50impl From<multihash::Error> for Error {
51 fn from(err: multihash::Error) -> Error {
52 Error::ParsingError(err.into())
53 }
54}
55
56impl From<bs58::decode::Error> for Error {
57 fn from(err: bs58::decode::Error) -> Error {
58 Error::ParsingError(err.into())
59 }
60}
61
62impl From<net::AddrParseError> for Error {
63 fn from(err: net::AddrParseError) -> Error {
64 Error::ParsingError(err.into())
65 }
66}
67
68impl From<num::ParseIntError> for Error {
69 fn from(err: num::ParseIntError) -> Error {
70 Error::ParsingError(err.into())
71 }
72}
73
74impl From<string::FromUtf8Error> for Error {
75 fn from(err: string::FromUtf8Error) -> Error {
76 Error::ParsingError(err.into())
77 }
78}
79
80impl From<str::Utf8Error> for Error {
81 fn from(err: str::Utf8Error) -> Error {
82 Error::ParsingError(err.into())
83 }
84}
85
86impl From<decode::Error> for Error {
87 fn from(e: decode::Error) -> Error {
88 Error::InvalidUvar(e)
89 }
90}