1use thiserror::Error as ThisError;
2
3pub type Result<T> = std::result::Result<T, Error>;
4
5#[derive(ThisError, Debug)]
6pub enum Error {
7 #[error(transparent)]
8 IO(#[from] std::io::Error),
9
10 #[error("Try From Endpoint Error")]
11 TryFromEndpoint,
12
13 #[error("Unsupported Endpoint: {0}")]
14 UnsupportedEndpoint(String),
15
16 #[error("Parse Endpoint Error: {0}")]
17 ParseEndpoint(String),
18
19 #[error("Buffer Full: {0}")]
20 BufferFull(String),
21
22 #[error("Missing Config: {0}")]
23 MissingConfig(String),
24
25 #[error("SOCKS5 Error: {0}")]
26 Socks5(String),
27
28 #[error("TLS Config Error: {0}")]
29 TlsConfig(String),
30
31 #[error("QUIC Config Error: {0}")]
32 QuicConfigError(String),
33
34 #[error("Connection Closed")]
35 ConnectionClosed,
36
37 #[cfg(feature = "ws")]
38 #[error("WebSocket Error: {0}")]
39 WsError(#[from] Box<async_tungstenite::tungstenite::Error>),
40
41 #[cfg(feature = "tls")]
42 #[error("Invalid DNS Name: {0}")]
43 InvalidDnsNameError(#[from] rustls_pki_types::InvalidDnsNameError),
44
45 #[cfg(feature = "quic")]
46 #[error("QUIC Connection Error: {0}")]
47 QuicConnection(#[from] quinn::ConnectionError),
48
49 #[cfg(feature = "quic")]
50 #[error("QUIC Connect Error: {0}")]
51 QuicConnect(#[from] quinn::ConnectError),
52
53 #[error(transparent)]
54 BincodeDecode(#[from] bincode::error::DecodeError),
55
56 #[error(transparent)]
57 BincodeEncode(#[from] bincode::error::EncodeError),
58
59 #[error(transparent)]
60 KaryonCore(#[from] karyon_core::Error),
61}