Skip to main content

hopr_lib/
errors.rs

1use hopr_api::node::state::HoprState;
2pub use hopr_transport::errors::{HoprTransportError, ProbeError, ProtocolError};
3use thiserror::Error;
4
5/// Enumeration of status errors thrown from this library.
6#[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/// Enumeration of errors thrown from this library.
16#[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}