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