tentacle_multiaddr/
error.rs1use 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}