use super::*;
use std::path::PathBuf;
pub fn get_hash_folder<HashType, P>(
dir: P,
hash: &mut HashType,
num_threads: usize,
progress: impl Fn(ProgressInfo),
) -> Result<String, IOError>
where
HashType: DynDigest + Clone + std::marker::Send,
P: AsRef<Path> + std::marker::Sync,
{
get_hash_files(
&fs::get_all_file_from_folder(dir),
hash,
num_threads,
progress,
)
}
pub fn get_hash_folders<HashType, P>(
dirs: &Vec<P>,
hash: &mut HashType,
num_threads: usize,
progress: impl Fn(ProgressInfo),
) -> Result<String, IOError>
where
HashType: DynDigest + Clone + std::marker::Send,
P: AsRef<Path> + std::marker::Sync,
{
let mut paths: Vec<PathBuf> = vec![];
for dir in dirs {
paths.append(&mut fs::get_all_file_from_folder(dir));
}
get_hash_files(&paths, hash, num_threads, progress)
}
#[cfg(test)]
mod tests {
use crate::fs::extra;
use blake2::{Blake2s256, Digest};
#[test]
fn get_hash_folder() {
let mut hash = Blake2s256::new();
let (temp_dir, _path) =
extra::generate_random_folder_with_files(325, 32);
let result = super::get_hash_folder(
&temp_dir.to_path_buf(),
&mut hash,
12,
|_| {},
)
.unwrap();
println!("result: {}", result);
assert_eq!(result.len(), 64); }
#[test]
fn get_hash_folders() {
let mut hash = Blake2s256::new();
let (temp_dir1, _path1) =
extra::generate_random_folder_with_files(325, 32);
let (temp_dir2, _path2) =
extra::generate_random_folder_with_files(325, 32);
let result = super::get_hash_folders(
&vec![temp_dir1.to_path_buf(), temp_dir2.to_path_buf()],
&mut hash,
12,
|_| {},
)
.unwrap();
println!("result: {}", result);
assert_eq!(result.len(), 64); }
}