1pub trait NormalizeHex {
2 fn normalize_hex(&self) -> String;
3}
4
5impl NormalizeHex for str {
6 fn normalize_hex(&self) -> String {
7 let lower = self.to_lowercase();
8 lower.strip_prefix("0x").unwrap_or(&lower).to_string()
9 }
10}
11
12impl NormalizeHex for String {
13 fn normalize_hex(&self) -> String {
14 self.as_str().normalize_hex()
15 }
16}
17
18#[cfg(test)]
19mod tests {
20 use super::*;
21
22 #[test]
23 fn test_normalize_hex_str_with_mixed_case_prefix() {
24 assert_eq!("0xABCDEF".normalize_hex(), "abcdef");
25 assert_eq!("0XAbCdEf".normalize_hex(), "abcdef");
26 assert_eq!("0xAbC123".normalize_hex(), "abc123");
27 }
28
29 #[test]
30 fn test_normalize_hex_str_without_prefix() {
31 assert_eq!("abcdef".normalize_hex(), "abcdef");
32 assert_eq!("123456".normalize_hex(), "123456");
33 assert_eq!("ABCDEF".normalize_hex(), "abcdef");
34 assert_eq!("AbCdEf".normalize_hex(), "abcdef");
35 }
36
37 #[test]
38 fn test_normalize_hex_str_already_normalized() {
39 assert_eq!("abcdef123456".normalize_hex(), "abcdef123456");
40 assert_eq!("0".normalize_hex(), "0");
41 assert_eq!("ff".normalize_hex(), "ff");
42 }
43
44 #[test]
45 fn test_normalize_hex_str_edge_cases() {
46 assert_eq!("".normalize_hex(), "");
47 assert_eq!("0x".normalize_hex(), "");
48 assert_eq!("0X".normalize_hex(), "");
49 assert_eq!("x".normalize_hex(), "x");
50 assert_eq!("0".normalize_hex(), "0");
51 }
52}