Skip to main content

karyon_p2p/
error.rs

1use thiserror::Error as ThisError;
2
3pub type Result<T> = std::result::Result<T, Error>;
4
5/// Represents karyon's p2p Error.
6#[derive(ThisError, Debug)]
7pub enum Error {
8    #[error(transparent)]
9    IO(#[from] std::io::Error),
10
11    #[error("Unsupported Protocol: {0}")]
12    UnsupportedProtocol(String),
13
14    #[error("Unsupported Endpoint: {0}")]
15    UnsupportedEndpoint(String),
16
17    #[error("Invalid Endpoint: {0}")]
18    InvalidEndpoint(String),
19
20    #[error("PeerID Try From PublicKey")]
21    PeerIDTryFromPublicKey,
22
23    #[error("PeerID Try From String")]
24    PeerIDTryFromString,
25
26    #[error("Invalid Message: {0}")]
27    InvalidMsg(String),
28
29    #[error("Incompatible Peer")]
30    IncompatiblePeer,
31
32    #[error("Incompatible Version: {0}")]
33    IncompatibleVersion(String),
34
35    #[error("Timeout")]
36    Timeout,
37
38    #[error("Parse Error: {0}")]
39    ParseError(String),
40
41    #[error("Config Error: {0}")]
42    Config(String),
43
44    #[error("Peer Shutdown")]
45    PeerShutdown,
46
47    #[error("Invalid Pong Msg")]
48    InvalidPongMsg,
49
50    #[error("Peer Already Connected")]
51    PeerAlreadyConnected,
52
53    #[error("Peer Not Found: {0}")]
54    PeerNotFound(String),
55
56    #[error("Discovery Error: {0}")]
57    Discovery(String),
58
59    #[error("Lookup Error: {0}")]
60    Lookup(String),
61
62    #[error("Channel Send Error: {0}")]
63    ChannelSend(String),
64
65    #[error(transparent)]
66    ChannelRecv(#[from] async_channel::RecvError),
67
68    #[error(transparent)]
69    ParseIntError(#[from] std::num::ParseIntError),
70
71    #[error(transparent)]
72    Base64Decode(#[from] base64::DecodeError),
73
74    #[error(transparent)]
75    BincodeDecode(#[from] bincode::error::DecodeError),
76
77    #[error(transparent)]
78    BincodeEncode(#[from] bincode::error::EncodeError),
79
80    #[error(transparent)]
81    ParseFloatError(#[from] std::num::ParseFloatError),
82
83    #[error(transparent)]
84    SemverError(#[from] semver::Error),
85
86    #[error(transparent)]
87    Yasna(#[from] yasna::ASN1Error),
88
89    #[error(transparent)]
90    Rand(#[from] rand::rand_core::OsError),
91
92    #[error(transparent)]
93    X509Parser(#[from] x509_parser::error::X509Error),
94
95    #[error(transparent)]
96    Rcgen(#[from] rcgen::Error),
97
98    #[cfg(feature = "smol")]
99    #[error("TLS Error: {0}")]
100    Rustls(#[from] futures_rustls::rustls::Error),
101
102    #[cfg(feature = "tokio")]
103    #[error("TLS Error: {0}")]
104    Rustls(#[from] tokio_rustls::rustls::Error),
105
106    #[error("Invalid DNS Name: {0}")]
107    InvalidDnsNameError(#[from] rustls_pki_types::InvalidDnsNameError),
108
109    #[error(transparent)]
110    KaryonCore(#[from] karyon_core::error::Error),
111
112    #[error(transparent)]
113    KaryonNet(#[from] karyon_net::Error),
114
115    #[error(transparent)]
116    KaryonEventEmitter(#[from] karyon_eventemitter::error::Error),
117}
118
119impl<T> From<async_channel::SendError<T>> for Error {
120    fn from(error: async_channel::SendError<T>) -> Self {
121        Error::ChannelSend(error.to_string())
122    }
123}