use crate::net::ErrorCode;
use thiserror::Error;
#[derive(Debug, Error)]
pub enum Error {
#[error("stream error")]
Network(#[from] commonware_stream::encrypted::Error),
#[error("unexpected response type for request {request_id}")]
UnexpectedResponse { request_id: u64 },
#[error("server error (code: {code:?}): {message}")]
Server { code: ErrorCode, message: String },
#[error("invalid request: {0}")]
InvalidRequest(String),
#[error("database operation failed")]
Database(#[from] commonware_storage::qmdb::Error<commonware_storage::mmr::Family>),
#[error("request channel closed - I/O task may have terminated")]
RequestChannelClosed,
#[error("response channel closed for request {request_id}")]
ResponseChannelClosed { request_id: u64 },
#[error("target update channel error: {reason}")]
TargetUpdateChannel { reason: String },
#[error("invalid configuration: {0}")]
InvalidConfig(String),
}
impl Error {
pub const fn to_error_code(&self) -> ErrorCode {
match self {
Self::InvalidRequest(_) => ErrorCode::InvalidRequest,
Self::Database(_) => ErrorCode::DatabaseError,
Self::Network(_) => ErrorCode::NetworkError,
Self::RequestChannelClosed | Self::ResponseChannelClosed { .. } => {
ErrorCode::InternalError
}
_ => ErrorCode::InternalError,
}
}
}