bankai_sdk/
errors.rs

1use bankai_verify::VerifyError;
2use thiserror::Error;
3
4use reqwest::StatusCode;
5
6use bankai_types::api::error::ErrorResponse;
7
8#[derive(Debug, Error)]
9#[non_exhaustive]
10pub enum SdkError {
11    #[error("network error: {0}")]
12    Transport(#[from] reqwest::Error),
13
14    #[error("serialization error: {0}")]
15    Serde(#[from] serde_json::Error),
16
17    #[error("invalid input: {0}")]
18    InvalidInput(String),
19
20    #[error("provider error: {0}")]
21    Provider(String),
22
23    #[error("beacon error: {0}")]
24    Beacon(String),
25
26    #[error("api error ({status}): {body}")]
27    Api { status: StatusCode, body: String },
28
29    #[error("api error response: {code} - {message}")]
30    ApiErrorResponse {
31        code: String,
32        message: String,
33        error_id: String,
34    },
35
36    #[error("verification error: {0}")]
37    Verification(String),
38
39    #[error("not found: {0}")]
40    NotFound(String),
41
42    #[error("not configured: {0}")]
43    NotConfigured(String),
44
45    #[error("other error: {0}")]
46    Other(String),
47
48    #[error("verification error: {0}")]
49    Verify(#[from] VerifyError),
50}
51
52pub type SdkResult<T> = Result<T, SdkError>;
53
54impl From<ErrorResponse> for SdkError {
55    fn from(e: ErrorResponse) -> Self {
56        SdkError::ApiErrorResponse {
57            code: e.code,
58            message: e.message,
59            error_id: e.error_id,
60        }
61    }
62}