1use thiserror::Error;
2
3pub type KondutoResult<T> = Result<T, KondutoError>;
5
6#[derive(Error, Debug)]
8pub enum KondutoError {
9 #[error("Erro de requisição HTTP: {0}")]
11 HttpError(#[from] reqwest::Error),
12
13 #[error("Erro de serialização JSON: {0}")]
15 SerializationError(#[from] serde_json::Error),
16
17 #[error("Erro da API Konduto: {status} - {message}")]
19 ApiError {
20 status: u16,
21 message: String,
22 code: Option<String>,
23 },
24
25 #[error("Erro de autenticação: {0}")]
27 AuthenticationError(String),
28
29 #[error("Erro de validação: {0}")]
31 ValidationError(String),
32
33 #[error("Variável de ambiente ausente: {0}")]
35 MissingEnvVar(String),
36
37 #[error("Erro: {0}")]
39 GenericError(String),
40}
41
42impl KondutoError {
43 pub fn api_error(status: u16, message: String, code: Option<String>) -> Self {
46 KondutoError::ApiError {
47 status,
48 message,
49 code,
50 }
51 }
52}
53
54impl From<reqwest_middleware::Error> for KondutoError {
55 fn from(err: reqwest_middleware::Error) -> Self {
56 match err {
58 reqwest_middleware::Error::Middleware(e) => {
59 KondutoError::GenericError(format!("Middleware error: {}", e))
60 }
61 reqwest_middleware::Error::Reqwest(e) => KondutoError::HttpError(e),
62 }
63 }
64}