1use crate::net::ErrorCode;
4use thiserror::Error;
5
6#[derive(Debug, Error)]
8pub enum Error {
9 #[error("stream error")]
11 Network(#[from] commonware_stream::encrypted::Error),
12
13 #[error("unexpected response type for request {request_id}")]
15 UnexpectedResponse { request_id: u64 },
16
17 #[error("server error (code: {code:?}): {message}")]
19 Server { code: ErrorCode, message: String },
20
21 #[error("invalid request: {0}")]
23 InvalidRequest(String),
24
25 #[error("stale compact target: {0}")]
27 StaleTarget(String),
28
29 #[error("database operation failed")]
31 Database(#[from] commonware_storage::qmdb::Error<commonware_storage::mmr::Family>),
32
33 #[error("request channel closed - I/O task may have terminated")]
35 RequestChannelClosed,
36
37 #[error("response channel closed for request {request_id}")]
39 ResponseChannelClosed { request_id: u64 },
40
41 #[error("invalid response from server")]
43 InvalidResponse,
44
45 #[error("target update channel error: {reason}")]
47 TargetUpdateChannel { reason: String },
48
49 #[error("invalid configuration: {0}")]
51 InvalidConfig(String),
52}
53
54impl Error {
55 pub const fn to_error_code(&self) -> ErrorCode {
57 match self {
58 Self::InvalidRequest(_) => ErrorCode::InvalidRequest,
59 Self::StaleTarget(_) => ErrorCode::StaleTarget,
60 Self::Database(_) => ErrorCode::DatabaseError,
61 Self::Network(_) => ErrorCode::NetworkError,
62 _ => ErrorCode::InternalError,
63 }
64 }
65}