pub fn compute_hash(input: &str) -> StringExpand description
Compute a 5-character base62 hash from an input string
Uses xxHash3 with the WDP seed 0x000031762D706477 to ensure deterministic
results across compilations and platforms.
Note: This function does NOT normalize input (no uppercase conversion).
For WDP-conformant hashing with normalization, use compute_wdp_hash.
§Examples
use waddling_errors_hash::compute_hash;
let hash = compute_hash("E.AUTH.TOKEN.001");
assert_eq!(hash.len(), 5);
assert!(hash.chars().all(|c| c.is_ascii_alphanumeric()));§Determinism
The same input will always produce the same hash:
use waddling_errors_hash::compute_hash;
let hash1 = compute_hash("E.AUTH.TOKEN.001");
let hash2 = compute_hash("E.AUTH.TOKEN.001");
assert_eq!(hash1, hash2);Examples found in repository?
examples/global_config.rs (line 37)
29fn main() {
30 println!("🦆 WDP-Compliant Hash Configuration Example");
31 println!("===========================================\n");
32
33 // 1. Default behavior (WDP-compliant)
34 println!("1. WDP-Compliant Default Configuration");
35 println!(" Algorithm: xxHash3 (WDP-specified)");
36 println!(" Seed: 0x{:016X} (WDP v1 seed)", WDP_SEED);
37 let default_hash = compute_hash("E.AUTH.TOKEN.001");
38 println!(" Hash: {}\n", default_hash);
39
40 // 2. Load global configuration
41 println!("2. Load Global Configuration");
42 let global_config = load_global_config();
43 println!(" Algorithm: {}", global_config.algorithm.as_str());
44 println!(" Seed: 0x{:016X}", global_config.seed);
45
46 let global_hash = compute_hash_with_config("E.AUTH.TOKEN.001", &global_config);
47 println!(" Hash: {}\n", global_hash);
48
49 // 3. Per-diagnostic seed overrides (for testing/isolation)
50 println!("3. Custom Seed Override (for testing)");
51
52 // Override seed (e.g., for tenant isolation in tests)
53 let custom_seed_config = apply_overrides(&global_config, Some(0x12345678));
54 let custom_seed_hash = compute_hash_with_config("E.AUTH.TOKEN.001", &custom_seed_config);
55 println!(" Override seed to 0x12345678:");
56 println!(" Hash: {}", custom_seed_hash);
57
58 // No override (uses global)
59 let no_override_config = apply_overrides(&global_config, None);
60 let no_override_hash = compute_hash_with_config("E.AUTH.TOKEN.001", &no_override_config);
61 println!(" No override (same as global):");
62 println!(" Hash: {}\n", no_override_hash);
63
64 // 4. Different error codes with same config
65 println!("4. Multiple Error Codes (same config)");
66 let codes = [
67 "E.AUTH.TOKEN.001",
68 "E.AUTH.SESSION.002",
69 "E.DB.CONNECTION.003",
70 "E.CACHE.MISS.004",
71 ];
72
73 for code in &codes {
74 let hash = compute_hash_with_config(code, &global_config);
75 println!(" {} → {}", code, hash);
76 }
77
78 println!("\n✅ WDP-compliant hashes ensure cross-platform consistency!");
79
80 // 5. Configuration priority demonstration
81 println!("\n5. Configuration Priority Order");
82 println!(" 1. Per-diagnostic seed override (highest)");
83 println!(" 2. Environment variable WADDLING_HASH_SEED");
84 println!(" 3. Cargo.toml hash_seed");
85 println!(" 4. WDP default seed (0x000031762D706477)\n");
86
87 // Check if environment variable is set
88 match option_env!("WADDLING_HASH_SEED") {
89 Some(seed) => {
90 println!(" 📌 Environment variable detected:");
91 println!(" WADDLING_HASH_SEED={}", seed);
92 }
93 None => {
94 println!(" ℹ️ No environment variable set");
95 println!(" Using WDP default seed");
96 }
97 }
98
99 println!("\n🎯 WDP ensures cross-language compatibility!");
100 println!(" Same error code produces same hash in:");
101 println!(" - Rust, Python, JavaScript, Go, Java, C, etc.");
102}