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::{
40    HttpError,
41    HttpErrorKind,
42    HttpResult,
43    RetryHint,
44};
45pub use options::{
46    HttpClientOptions,
47    HttpConfigError,
48    HttpConfigErrorKind,
49    HttpLoggingOptions,
50    HttpRetryMethodPolicy,
51    HttpRetryOptions,
52    HttpTimeoutOptions,
53    ProxyOptions,
54    ProxyType,
55    SensitiveHttpHeaders,
56};
57pub use qubit_retry::{
58    RetryDelay,
59    RetryJitter,
60    RetryOptions,
61};
62pub use request::{
63    AsyncHttpHeaderInjector,
64    HttpHeaderInjector,
65    HttpRequest,
66    HttpRequestBody,
67    HttpRequestBodyByteStream,
68    HttpRequestBuilder,
69    HttpRequestInterceptor,
70    HttpRequestInterceptors,
71    HttpRequestRetryOverride,
72    HttpRequestStreamingBody,
73};
74pub use response::{
75    HttpByteStream,
76    HttpResponse,
77    HttpResponseInterceptor,
78    HttpResponseInterceptors,
79    HttpResponseMeta,
80};
81pub use tokio_util::sync::CancellationToken;