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}