#[must_use]
pub fn query_hash(query: &str) -> String {
let digest = blake3::hash(query.as_bytes()).to_hex();
format!("blake3:{}", &digest.as_str()[..16])
}
#[cfg(test)]
mod tests {
use super::query_hash;
#[test]
fn query_hash_is_deterministic_and_prefixed() {
let a = query_hash("forbidden dependencies");
let b = query_hash("forbidden dependencies");
assert_eq!(a, b);
assert!(a.starts_with("blake3:"));
assert_eq!(a.len(), "blake3:".len() + 16);
}
#[test]
fn query_hash_differs_across_queries() {
let a = query_hash("forbidden dependencies");
let b = query_hash("prepare release");
assert_ne!(a, b);
}
#[test]
fn query_hash_is_empty_safe() {
let h = query_hash("");
assert!(h.starts_with("blake3:"));
}
#[test]
fn query_hash_handles_unicode() {
let h = query_hash("café résumé 中文 🚀");
assert!(h.starts_with("blake3:"));
assert_eq!(h.len(), "blake3:".len() + 16);
}
}