extern crate chrono; extern crate crypto_hash; extern crate serde_yaml; extern crate walkdir; use std::env; use std::io; use std::collections::BTreeMap; use walkdir::{WalkDir, DirEntry}; mod format; fn main() -> io::Result<()> { for dirname in env::args().skip(1) { let maps = WalkDir::new(&dirname) .into_iter() .filter_map(|e| e.ok()) .map(|e| mkmap(e)); for map in maps { println!("{}", serde_yaml::to_string(&map).unwrap()); } } Ok(()) } fn mkmap(e: DirEntry) -> BTreeMap<&'static str, String> { let fields = vec![ ("Name", format::name(&e)), ("Mtime", format::mtime(&e)), ("Mode", format::mode(&e)), ("Ino", format::inode(&e)), ("Dev", format::dev(&e)), ("Nlink", format::nlink(&e)), ("Size", format::size(&e)), ("Uid", format::uid(&e)), ("Username", format::username(&e)), ("Gid", format::gid(&e)), ("Group", format::group(&e)), ]; let mut map: BTreeMap<&str, String> = BTreeMap::from(fields.iter().cloned().collect()); if let Ok(m) = e.metadata() { if m.is_file() { map.insert("SHA256", format::sha256(&e)); } } map }