#![allow(clippy::multiple_crate_versions)]
#[cfg(all(
not(target_arch = "wasm32"),
any(feature = "hyper-backend", feature = "ws"),
not(any(feature = "rustls", feature = "native-tls"))
))]
compile_error!(
"`hyper-backend` and `ws` need a TLS engine: enable `rustls` (default) or `native-tls`."
);
pub mod backend;
use backend::DefaultBackend;
pub use cache::Cache;
pub use client::Client;
pub use http_kit::*;
pub use oauth2::OAuth2ClientCredentials;
pub mod transport;
#[cfg(not(target_arch = "wasm32"))]
pub use transport::{Proxy, ProxyBuilder};
pub use transport::{Transport, TransportBuilder};
pub mod auth;
pub mod cache;
pub mod cookie;
pub mod error;
pub mod oauth2;
pub mod timeout;
mod client;
pub mod redirect;
pub mod retry;
pub use error::Error;
mod ext;
pub mod multipart;
#[cfg(feature = "ws")]
pub mod websocket;
pub use ext::ResponseExt;
pub use timeout::Timeout;
#[derive(Debug)]
pub struct DefaultClient {
inner: redirect::FollowRedirect<DefaultBackend>,
}
impl DefaultClient {
#[must_use]
pub fn new(transport: Transport) -> Self {
Self {
inner: DefaultBackend::new(transport).follow_redirect(),
}
}
#[must_use]
pub fn disable_redirect(self) -> DefaultBackend {
self.inner.disable_redirect()
}
#[allow(clippy::missing_const_for_fn)]
#[must_use]
pub fn raw(transport: Transport) -> DefaultBackend {
DefaultBackend::new(transport)
}
}
impl Default for DefaultClient {
fn default() -> Self {
Self::new(Transport::system())
}
}
impl Endpoint for DefaultClient {
type Error = Error;
async fn respond(&mut self, request: &mut Request) -> Result<Response, Self::Error> {
self.inner.respond(request).await.map_err(Into::into)
}
}
impl Client for DefaultClient {}
#[must_use]
pub fn client() -> DefaultClient {
DefaultClient::default()
}
#[must_use]
pub fn client_with(transport: Transport) -> DefaultClient {
DefaultClient::new(transport)
}
pub async fn get<U>(uri: U) -> Result<Response, Error>
where
U: TryInto<Uri>,
U::Error: core::fmt::Display,
{
let mut client = client();
client.method(Method::GET, uri)?.await
}
pub async fn post<U>(uri: U) -> Result<Response, Error>
where
U: TryInto<Uri>,
U::Error: core::fmt::Display,
{
let mut client = client();
client.method(Method::POST, uri)?.await
}
pub async fn put<U>(uri: U) -> Result<Response, Error>
where
U: TryInto<Uri>,
U::Error: core::fmt::Display,
{
let mut client = client();
client.method(Method::PUT, uri)?.await
}
pub async fn delete<U>(uri: U) -> Result<Response, Error>
where
U: TryInto<Uri>,
U::Error: core::fmt::Display,
{
let mut client = client();
client.method(Method::DELETE, uri)?.await
}