1use crate::net::ErrorCode;
4use thiserror::Error;
5
6#[derive(Debug, Error)]
8pub enum Error {
9 #[error("stream error")]
11 Network(#[from] commonware_stream::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("database operation failed")]
27 Database(#[from] commonware_storage::adb::Error),
28
29 #[error("request channel closed - I/O task may have terminated")]
31 RequestChannelClosed,
32
33 #[error("response channel closed for request {request_id}")]
35 ResponseChannelClosed { request_id: u64 },
36
37 #[error("target update channel error: {reason}")]
39 TargetUpdateChannel { reason: String },
40
41 #[error("invalid configuration: {0}")]
43 InvalidConfig(String),
44}
45
46impl Error {
47 pub fn to_error_code(&self) -> ErrorCode {
49 match self {
50 Error::InvalidRequest(_) => ErrorCode::InvalidRequest,
51 Error::Database(_) => ErrorCode::DatabaseError,
52 Error::Network(_) => ErrorCode::NetworkError,
53 Error::RequestChannelClosed | Error::ResponseChannelClosed { .. } => {
54 ErrorCode::InternalError
55 }
56 _ => ErrorCode::InternalError,
57 }
58 }
59}