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