use std::collections::hash_map::DefaultHasher;
use std::hash::{Hash, Hasher};
use std::path::Path;
pub fn to_absolute_path(filepath: &str) -> String {
match Path::new(filepath).canonicalize() {
Ok(path) => path.to_string_lossy().to_string(),
Err(_) => {
if Path::new(filepath).is_absolute() {
filepath.to_string()
} else {
match std::env::current_dir() {
Ok(current_dir) => current_dir.join(filepath).to_string_lossy().to_string(),
Err(_) => filepath.to_string(), }
}
}
}
}
pub fn generate_document_id(filepath: &str) -> String {
let absolute_path = to_absolute_path(filepath);
let filename = Path::new(filepath)
.file_name()
.and_then(|name| name.to_str())
.unwrap_or("unknown")
.replace('.', "-");
let mut hasher = DefaultHasher::new();
absolute_path.hash(&mut hasher);
let hash = hasher.finish();
let hash_str = format!("{:x}", hash);
let short_hash = &hash_str[..8.min(hash_str.len())];
format!("{}-{}", filename, short_hash)
}