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 URL, header, and body sanitization
23//! - Built-in SSE decoding utilities in [`sse`]
24//! - Unified error model and retry hints
25//!
26
27mod client;
28pub mod constants;
29mod content_type;
30mod error;
31mod options;
32mod request;
33mod response;
34mod sanitize;
35pub mod sse;
36
37pub use client::http_logger::HttpLogger;
38pub use client::HttpClient;
39pub use client::HttpClientFactory;
40pub use error::{
41    HttpError,
42    HttpErrorKind,
43    HttpResult,
44    RetryHint,
45};
46pub use options::{
47    HttpClientOptions,
48    HttpConfigError,
49    HttpConfigErrorKind,
50    HttpLoggingOptions,
51    HttpRetryMethodPolicy,
52    HttpRetryOptions,
53    HttpTimeoutOptions,
54    ProxyOptions,
55    ProxyType,
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    HttpResponseInterceptorContext,
79    HttpResponseInterceptors,
80    HttpResponseMeta,
81};
82pub use sanitize::{
83    LogSanitizePolicy,
84    LogSanitizer,
85};
86pub use tokio_util::sync::CancellationToken;