cat_gateway/utils/
blake2b_hash.rs1use blake2b_simd::Params;
4
5pub(crate) fn generate_uuid_string_from_data(key: &str, data: &[String]) -> String {
15 let mut bytes: uuid::Bytes = uuid::Bytes::default();
17
18 let mut hasher = Params::new()
20 .hash_length(bytes.len())
21 .key(key.as_bytes())
22 .personal(b"Project Catalyst")
23 .to_state();
24
25 for datum in data {
26 hasher.update(datum.as_bytes());
27 }
28
29 let hash = hasher.finalize();
31
32 bytes.copy_from_slice(hash.as_bytes());
34
35 uuid::Builder::from_custom_bytes(bytes)
37 .as_uuid()
38 .as_hyphenated()
39 .to_string()
40}
41
42#[cfg(test)]
43mod tests {
44 use super::*;
45
46 #[test]
47 fn test_generate_uuid_string_from_data() {
48 let key = "test key";
49 let data = vec!["test1".to_string(), "test2".to_string()];
50
51 let uuid_str = generate_uuid_string_from_data(key, &data);
53
54 assert!(uuid::Uuid::parse_str(&uuid_str).is_ok());
56 }
57
58 #[test]
59 fn test_generate_uuid_string_from_data_empty_data() {
60 let key = "test key";
61 let data: Vec<String> = vec![];
62
63 let uuid_str = generate_uuid_string_from_data(key, &data);
65
66 assert!(uuid::Uuid::parse_str(&uuid_str).is_ok());
68 }
69
70 #[test]
71 fn test_generate_uuid_string_from_data_empty_key() {
72 let key = "";
73 let data = vec!["test1".to_string(), "test2".to_string()];
74
75 let uuid_str = generate_uuid_string_from_data(key, &data);
77
78 assert!(uuid::Uuid::parse_str(&uuid_str).is_ok());
80 }
81}