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};