marketstack/api/
client.rs1use std::error::Error;
2
3use async_trait::async_trait;
4use bytes::Bytes;
5use http::request::Builder as RequestBuilder;
6use http::Response;
7use url::Url;
8
9use crate::api::ApiError;
10use crate::auth::Auth;
11
12pub trait RestClient {
14 type Error: Error + Send + Sync + 'static;
16
17 fn rest_endpoint(&self, endpoint: &str) -> Result<Url, ApiError<Self::Error>>;
21
22 fn get_auth(&self) -> Option<Auth>;
24}
25
26pub trait Client: RestClient {
28 fn rest(
30 &self,
31 request: RequestBuilder,
32 body: Vec<u8>,
33 ) -> Result<Response<Bytes>, ApiError<Self::Error>>;
34}
35
36#[async_trait]
38pub trait AsyncClient: RestClient {
39 async fn rest_async(
41 &self,
42 request: RequestBuilder,
43 body: Vec<u8>,
44 ) -> Result<Response<Bytes>, ApiError<Self::Error>>;
45}