use std::str::FromStr;
use tlsh2::{TlshDefault, TlshDefaultBuilder};
pub fn compute(data: &[u8]) -> Option<String> {
let tlsh = TlshDefaultBuilder::build_from(data)?;
let bytes = tlsh.hash();
Some(String::from_utf8(bytes.to_vec()).unwrap_or_default())
}
pub fn distance_to_similarity(dist: i32) -> u32 {
if dist <= 0 {
return 100;
}
let score = 100i32 - (dist / 3);
score.max(0) as u32
}
pub fn similarity(h1: &str, h2: &str) -> u32 {
let t1 = match TlshDefault::from_str(h1) {
Ok(t) => t,
Err(_) => return 0,
};
let t2 = match TlshDefault::from_str(h2) {
Ok(t) => t,
Err(_) => return 0,
};
let dist = t1.diff(&t2, true);
distance_to_similarity(dist)
}