Skip to main content

qubit_http/
lib.rs

1/*******************************************************************************
2 *
3 *    Copyright (c) 2025 - 2026 Haixing Hu.
4 *
5 *    SPDX-License-Identifier: Apache-2.0
6 *
7 *    Licensed under the Apache License, Version 2.0.
8 *
9 ******************************************************************************/
10#![allow(clippy::result_large_err)]
11// Keep `HttpError` rich (method/url/status/source) for diagnostics and retry decisions
12// across the crate's public APIs.
13
14//! # Qubit HTTP
15//!
16//! A general-purpose HTTP infrastructure module for Rust services.
17//!
18//! This crate provides:
19//! - Unified HTTP client options and factory abstractions
20//! - Loading those options from [`qubit_config::ConfigReader`] (`from_config` / factory `create_from_config`)
21//! - Consistent request/response/stream APIs
22//! - Secure and configurable logging with sensitive header masking
23//! - Built-in SSE decoding utilities in [`sse`]
24//! - Unified error model and retry hints
25//!
26
27mod client;
28pub mod constants;
29mod error;
30mod options;
31mod request;
32mod response;
33pub mod sse;
34
35pub use client::http_logger::HttpLogger;
36pub use client::HttpClient;
37pub use client::HttpClientFactory;
38pub use constants::DEFAULT_SENSITIVE_HEADER_NAMES;
39pub use error::{HttpError, HttpErrorKind, HttpResult, RetryHint};
40pub use options::{
41    HttpClientOptions, HttpConfigError, HttpConfigErrorKind, HttpLoggingOptions,
42    HttpRetryMethodPolicy, HttpRetryOptions, HttpTimeoutOptions, ProxyOptions, ProxyType,
43    SensitiveHttpHeaders,
44};
45pub use qubit_retry::{RetryDelay, RetryJitter, RetryOptions};
46pub use request::{
47    AsyncHttpHeaderInjector, HttpHeaderInjector, HttpRequest, HttpRequestBody,
48    HttpRequestBodyByteStream, HttpRequestBuilder, HttpRequestInterceptor, HttpRequestInterceptors,
49    HttpRequestRetryOverride, HttpRequestStreamingBody,
50};
51pub use response::{
52    HttpByteStream, HttpResponse, HttpResponseInterceptor, HttpResponseInterceptors,
53    HttpResponseMeta,
54};
55pub use tokio_util::sync::CancellationToken;