Skip to main content

qubit_sanitize/
lib.rs

1/*******************************************************************************
2 *
3 *    Copyright (c) 2026 Haixing Hu.
4 *
5 *    SPDX-License-Identifier: Apache-2.0
6 *
7 *    Licensed under the Apache License, Version 2.0.
8 *
9 ******************************************************************************/
10//! # Qubit Sanitize
11//!
12//! Provides reusable sanitization utilities for logs, diagnostics, and
13//! structured debug output.
14//!
15//! The core API sanitizes one `(field, value)` pair at a time and requires the
16//! caller to choose a [`NameMatchMode`].
17//!
18//! ```
19//! use qubit_sanitize::{
20//!     FieldSanitizer,
21//!     NameMatchMode,
22//! };
23//!
24//! let sanitizer = FieldSanitizer::default();
25//!
26//! assert_eq!(
27//!     sanitizer.sanitize_value("password", "secret", NameMatchMode::Exact),
28//!     "<redacted>",
29//! );
30//! assert_eq!(
31//!     sanitizer.sanitize_value("OPENAI_API_KEY", "abcdef", NameMatchMode::Exact),
32//!     "abcdef",
33//! );
34//! assert_eq!(
35//!     sanitizer.sanitize_value(
36//!         "OPENAI_API_KEY",
37//!         "abcdef",
38//!         NameMatchMode::ExactOrSuffix,
39//!     ),
40//!     "****",
41//! );
42//! ```
43//!
44//! Adapter APIs apply the same explicit matching mode to structured inputs.
45//!
46//! ```
47//! use http::header::{
48//!     AUTHORIZATION,
49//!     HeaderValue,
50//! };
51//! use qubit_sanitize::{
52//!     HttpHeaderSanitizer,
53//!     NameMatchMode,
54//! };
55//!
56//! let sanitizer = HttpHeaderSanitizer::default();
57//! let value = HeaderValue::from_static("Bearer abcdef");
58//!
59//! assert_eq!(
60//!     sanitizer.sanitize_value(&AUTHORIZATION, &value, NameMatchMode::ExactOrSuffix),
61//!     "****",
62//! );
63//! ```
64
65pub mod adapter;
66pub mod core;
67
68pub use adapter::{
69    ArgvSanitizer,
70    EnvSanitizer,
71    FormUrlEncodedSanitizer,
72    HttpBodySanitizer,
73    HttpHeaderSanitizer,
74    UrlSanitizer,
75};
76pub use core::{
77    DEFAULT_EXTRA_FIELDS,
78    FieldSanitizePolicy,
79    FieldSanitizer,
80    MaskPolicies,
81    MaskPolicy,
82    NameMatchMode,
83    SensitiveFieldPreset,
84    SensitiveFields,
85    SensitivityLevel,
86    canonicalize_field_name,
87};