pub use async_trait::async_trait;
pub use bytes::Bytes;
pub use http::Method;
use crate::{HeaderMap, Response, Result, Url};
#[async_trait]
pub trait Client {
async fn execute(
&self,
method: Method,
url: Url,
headers: HeaderMap,
body: Option<Bytes>,
) -> Result<Response<Bytes>>;
}
#[async_trait(?Send)]
pub trait LocalClient {
async fn execute(
&self,
method: Method,
url: Url,
headers: HeaderMap,
body: Option<Bytes>,
) -> Result<Response<Bytes>>;
}
pub trait BlockingClient {
fn execute(
&self,
method: Method,
url: Url,
headers: HeaderMap,
body: Option<Bytes>,
) -> Result<Response<Bytes>>;
}
#[async_trait(?Send)]
impl<C> LocalClient for C
where
C: Client,
{
async fn execute(
&self,
method: Method,
url: Url,
headers: HeaderMap,
body: Option<Bytes>,
) -> Result<Response<Bytes>> {
Client::execute(self, method, url, headers, body).await
}
}