amazon_cloudfront_client_routing_lib/
hash.rs1use std::hash::Hasher;
5use twox_hash::XxHash64;
6
7pub fn hash_cgid(cgid: &str) -> u64 {
26 if cgid.is_empty() {
27 return 0;
28 }
29
30 let mut hasher = XxHash64::default();
31 hasher.write(cgid.as_bytes());
32
33 hasher.finish()
34}
35
36#[cfg(test)]
37mod tests {
38 use super::hash_cgid;
39
40 #[test]
41 fn validate_hash_cgid() {
42 assert_eq!(9402033733208250942, hash_cgid("SM89P"));
43 assert_eq!(16745045142164894816, hash_cgid("DP0124QHYT"));
44 assert_eq!(15007018045908736946, hash_cgid("b086vx9VmK"));
45 assert_eq!(15151312625956013430, hash_cgid("abcdefghijhjuio"));
46 assert_eq!(
47 8696017447135811798,
48 hash_cgid("VZ9C5G6H12PC5GH7Y0ABCDEFGHIJHJUIOZZAA1")
49 );
50 }
51
52 #[test]
53 fn validate_hash_similar_cgids_not_equal() {
54 assert_ne!(hash_cgid("SM89P"), hash_cgid("sm89p"));
55 assert_ne!(hash_cgid("abcdefghijhjuio0"), hash_cgid("abcdefghijhjuio"));
56 assert_ne!(hash_cgid("B086VX9VMK "), hash_cgid("B086VX9VMK"));
57 assert_ne!(
58 hash_cgid("hfquwah9tds\u{00}"),
59 hash_cgid("hfquwah9tds\u{01}")
60 );
61 }
62
63 #[test]
64 fn validate_hash_empty_cgid_zero() {
65 assert_eq!(0, hash_cgid(""));
66 }
67}