httpclient/
lib.rs

1#![deny(clippy::all, clippy::pedantic, clippy::unwrap_used)]
2#![allow(clippy::module_name_repetitions, clippy::missing_errors_doc, clippy::missing_panics_doc)]
3
4pub use body::{Body, InMemoryBody};
5#[cfg(feature = "stream")]
6pub use body::DataStream;
7pub use client::Client;
8pub use error::{Error, InMemoryError, InMemoryResult, ProtocolError, ProtocolResult, Result};
9pub use http::{header, header::HeaderName, Method, StatusCode, Uri};
10pub use middleware::{Follow, Logger, Middleware, Next, Recorder, Retry, TotalTimeout};
11pub use request::{InMemoryRequest, Request, RequestBuilder, RequestBuilderExt, RequestExt};
12pub use response::{InMemoryResponse, InMemoryResponseExt, ResponseExt};
13use std::sync::OnceLock;
14
15pub mod header_ext {
16    use http::HeaderName;
17
18    pub const SUBJECT: HeaderName = HeaderName::from_static("subject");
19    pub const FROM: HeaderName = HeaderName::from_static("from");
20    pub const TO: HeaderName = HeaderName::from_static("to");
21    pub const CONTENT_TRANSFER_ENCODING: HeaderName = HeaderName::from_static("content-transfer-encoding");
22}
23pub type Response<T = Body> = http::Response<T>;
24
25mod body;
26mod client;
27mod error;
28pub mod middleware;
29pub mod multipart;
30pub mod recorder;
31mod request;
32mod response;
33mod sanitize;
34#[cfg(feature = "oauth2")]
35pub mod oauth2;
36
37static SHARED_CLIENT: OnceLock<Client> = OnceLock::new();
38
39/// Use this to customize the shared client.
40/// Must be called before any requests are made, otherwise it will have no effect.
41pub fn init_shared_client(client: Client) {
42    let _ = SHARED_CLIENT.set(client);
43}
44
45/// Use the shared, global client
46pub fn client() -> &'static Client {
47    SHARED_CLIENT.get_or_init(Client::new)
48}