#![cfg_attr(
all(feature = "reqwest", feature = "retry", feature = "tracing"),
doc = include_str!("../README.md")
)]
#: a tower-based HTTP client. See the README for the guide."
)]
#![cfg_attr(docsrs, feature(doc_cfg))]
#![cfg_attr(target_family = "wasm", allow(clippy::arc_with_non_send_sync))]
mod body;
mod client;
#[cfg(all(feature = "fs", not(target_family = "wasm")))]
mod download;
mod error;
mod local_service;
mod maybe;
pub mod multipart;
pub mod provider;
mod request;
mod request_options;
#[cfg(feature = "reqwest")]
mod reqwest_service;
mod response;
#[cfg(feature = "retry")]
pub mod retry;
pub mod sse;
#[cfg(feature = "time")]
pub mod timeout;
#[cfg(feature = "time")]
mod timer;
#[cfg(feature = "tracing")]
pub mod trace;
mod upload;
pub use body::Body;
pub use client::{Client, HttpService};
pub use error::Error;
pub use local_service::LocalBoxCloneService;
pub use maybe::{MaybeSend, MaybeSync};
pub use provider::ProviderLayer;
pub use request::RequestBuilder;
pub use request_options::RequestOptions;
#[cfg(feature = "reqwest")]
pub use reqwest_service::ReqwestService;
pub use response::Response;
pub use upload::Upload;
pub use http;
pub use http::{header, HeaderMap, Method, StatusCode};
pub use secrecy;
pub use secrecy::{ExposeSecret, SecretString};
pub use tower;
pub type BoxError = Box<dyn std::error::Error + Send + Sync>;
#[cfg(all(test, not(target_family = "wasm")))]
mod send_tests {
use super::*;
fn send_sync<T: Send + Sync>() {}
fn send<T: Send>(_: &T) {}
#[test]
fn natively_clients_bodies_and_futures_are_send() {
send_sync::<Client>();
send_sync::<HttpService>();
send_sync::<Body>();
send_sync::<Response>();
send_sync::<RequestBuilder>();
send_sync::<Upload>();
send_sync::<multipart::Form>();
send_sync::<ProviderLayer>();
let request = Client::default().request(Method::GET, "https://example.com/");
send(&request.send());
let response = Response::from(http::Response::new(Body::empty()));
let events = Response::from(http::Response::new(Body::empty())).events();
send(&events);
send(&events.json::<serde_json::Value>());
send(&response.bytes_stream());
#[cfg(feature = "time")]
send(
&sse::Events::from_bytes(futures_util::stream::empty::<Result<&'static [u8], Error>>())
.idle_timeout(std::time::Duration::from_secs(1)),
);
}
}