1use hopr_api::node::state::HoprState;
2pub use hopr_transport::errors::{HoprTransportError, ProbeError, ProtocolError};
3use thiserror::Error;
4
5#[derive(Error, Debug)]
7pub enum HoprStatusError {
8 #[error("HOPR status general error: '{0}'")]
9 General(String),
10
11 #[error("HOPR status error: '{0}'")]
12 NotThereYet(HoprState, String),
13}
14
15#[derive(Error, Debug)]
17pub enum HoprLibError {
18 #[error("HOPR lib Error: '{0}'")]
19 GeneralError(String),
20
21 #[error("configuration validation failed: {0}")]
22 ConfigurationError(#[from] validator::ValidationErrors),
23
24 #[error("database error: {0}")]
25 DbError(#[source] anyhow::Error),
26
27 #[error("chain error: {0}")]
28 ChainError(#[source] anyhow::Error),
29
30 #[error(transparent)]
31 StatusError(#[from] HoprStatusError),
32
33 #[error(transparent)]
34 TransportError(#[from] HoprTransportError),
35
36 #[error(transparent)]
37 TypeError(#[from] hopr_types::primitive::errors::GeneralError),
38
39 #[error(transparent)]
40 NetworkTypeError(#[from] hopr_network_types::errors::NetworkTypeError),
41
42 #[error("rayon thread pool queue full: {0}")]
43 SpawnError(#[from] hopr_parallelize::cpu::SpawnError),
44
45 #[error("unspecified error: {0}")]
46 Other(#[source] anyhow::Error),
47}
48
49pub type Result<T> = std::result::Result<T, HoprLibError>;
50
51impl HoprLibError {
52 pub fn chain<E: Into<anyhow::Error>>(e: E) -> Self {
53 Self::ChainError(e.into())
54 }
55
56 pub fn db<E: Into<anyhow::Error>>(e: E) -> Self {
57 Self::DbError(e.into())
58 }
59
60 pub fn other(e: impl Into<anyhow::Error>) -> Self {
61 Self::Other(e.into())
62 }
63}