Skip to main content

xmtp_common/
hex.rs

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() {
24        assert_eq!("0xABCDEF".normalize_hex(), "abcdef");
25        assert_eq!("0XAbCdEf".normalize_hex(), "abcdef");
26        assert_eq!("0xAbC123".normalize_hex(), "abc123");
27        assert_eq!("123456".normalize_hex(), "123456");
28        assert_eq!("ABCDEF".normalize_hex(), "abcdef");
29        assert_eq!("AbCdEf".normalize_hex(), "abcdef");
30        assert_eq!("".normalize_hex(), "");
31        assert_eq!("0x".normalize_hex(), "");
32        assert_eq!("0X".normalize_hex(), "");
33        assert_eq!("x".normalize_hex(), "x");
34        assert_eq!("0".normalize_hex(), "0");
35        assert_eq!(String::from("0XAbCdEf").normalize_hex(), "abcdef");
36    }
37}