use libmhash::prelude::*; fn main() { // create a hasher server let mut server = Builder::new() .on_result(Some(|r: &HasherResult| println!("{:#?}", r))) .build() .unwrap(); // use sender to send files or raw data let sender = server.data_sender(); // you can also send files without spawning a new thread std::thread::spawn(move || { for entry in std::fs::read_dir(".").unwrap() { let dir = entry.unwrap(); if dir.path().is_file() { // create hashers let mut hashers = vec![]; // tags can be String or something else, but better choose something cheap to clone. hashers.push(HasherWrapper::new( HasherTag::SHA1, libmhash::paranoid_hash::SHA1::new(), )); // you can also create HasherWrapper from HasherTags hashers.push(HasherWrapper::create_from_tag(HasherTag::MD5)); // send files sender.push_file(dir.path(), hashers); } } // don't forget to call end, otherwise the hasher server will keep waiting for new data. sender.end(); }); // do the computations, callbacks will be called in the same thread. server.compute(); }