global_config/
global_config.rs

1//! Global Hash Configuration Example
2//!
3//! This example demonstrates how the WDP-compliant hash configuration works.
4//!
5//! WDP specifies xxHash3 as the only algorithm, with the standard seed
6//! `0x000031762D706477` (ASCII "wdp-v1\0\0" as little-endian u64).
7//!
8//! ## Running
9//!
10//! ```bash
11//! # Default behavior (WDP-compliant)
12//! cargo run --example global_config
13//!
14//! # With custom seed (for testing/isolation)
15//! WADDLING_HASH_SEED=0x12345678 cargo run --example global_config
16//! ```
17//!
18//! ## Cargo.toml Configuration
19//!
20//! ```toml
21//! [package.metadata.waddling-errors]
22//! hash_seed = "0x000031762D706477"  # WDP v1 seed (default)
23//! ```
24
25use waddling_errors_hash::{
26    WDP_SEED, apply_overrides, compute_hash, compute_hash_with_config, load_global_config,
27};
28
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}