api_client_framework/
lib.rs

1//! Adapted from https://github.com/cloudflare/cloudflare-rs
2
3mod async_client;
4mod endpoint;
5
6/// Blockscout services related structs.
7/// Contains config and client definitions to be used by blockscout-rs services.
8#[cfg(feature = "blockscout")]
9pub mod blockscout;
10
11pub use async_client::{HttpApiClient, HttpApiClientConfig};
12pub use endpoint::{serialize_query, Endpoint};
13
14pub use reqwest;
15pub use reqwest_middleware;
16pub use url;
17
18/******************** Config definition ********************/
19
20#[derive(Debug, thiserror::Error)]
21pub enum Error {
22    #[error("middleware error: {0}")]
23    Middleware(anyhow::Error),
24    #[error("request error: {0}")]
25    Request(#[from] reqwest::Error),
26    #[error("response deserialization failed: {0}")]
27    Deserialization(#[from] serde_path_to_error::Error<serde_json::Error>),
28    #[error("request returned with invalid status code: 404 - Not Found")]
29    NotFound,
30    #[error("request returned with invalid status code: {status_code} - {message}")]
31    InvalidStatusCode {
32        status_code: reqwest::StatusCode,
33        message: String,
34    },
35    #[error("{0:#?}")]
36    CustomError(anyhow::Error),
37}
38
39impl From<reqwest_middleware::Error> for Error {
40    fn from(value: reqwest_middleware::Error) -> Self {
41        match value {
42            reqwest_middleware::Error::Middleware(error) => Error::Middleware(error),
43            reqwest_middleware::Error::Reqwest(error) => Error::Request(error),
44        }
45    }
46}