1use hopr_crypto_packet::errors::PacketError;
2pub use hopr_transport_network::errors::NetworkError;
3pub use hopr_transport_probe::errors::ProbeError;
4pub use hopr_transport_protocol::errors::ProtocolError;
5use hopr_transport_session::errors::TransportSessionError;
6use thiserror::Error;
7
8#[derive(Error, Debug)]
10pub enum HoprTransportError {
11 #[error("API error: {0}")]
12 Api(String),
13
14 #[error("General error: {0}")]
15 General(#[from] hopr_primitive_types::errors::GeneralError),
16
17 #[error("Path error: {0}")]
18 Path(#[from] hopr_internal_types::errors::PathError),
19
20 #[error("Protocol error: {0}")]
21 Protocol(#[from] ProtocolError),
22
23 #[error("Probe error: {0}")]
24 Probe(#[from] ProbeError),
25
26 #[error("Transport session error: {0}")]
27 Session(#[from] TransportSessionError),
28
29 #[error("Packet error: {0}")]
30 Packet(#[from] PacketError),
31
32 #[error("Type error: {0}")]
33 Types(#[from] hopr_internal_types::errors::CoreTypesError),
34
35 #[error("Network monitoring error: {0}")]
36 NetworkError(#[from] NetworkError),
37
38 #[error(transparent)]
39 ApplicationLayerError(#[from] hopr_protocol_app::errors::ApplicationLayerError),
40
41 #[error("chain error: {0}")]
42 Chain(#[source] anyhow::Error),
43
44 #[error("unspecified error: {0}")]
45 Other(#[source] anyhow::Error),
46}
47
48impl HoprTransportError {
49 pub fn chain<E: Into<anyhow::Error>>(e: E) -> Self {
50 Self::Chain(e.into())
51 }
52
53 pub fn other<E: Into<anyhow::Error>>(e: E) -> Self {
54 Self::Other(e.into())
55 }
56}
57
58pub type Result<T> = core::result::Result<T, HoprTransportError>;