use std::env; use std::io; use std::collections::BTreeMap; extern crate walkdir; use walkdir::{WalkDir, DirEntry}; extern crate chrono; extern crate crypto_hash; extern crate serde_yaml; mod format; fn main() -> io::Result<()> { for dirname in env::args().skip(1) { for e in WalkDir::new(&dirname).into_iter().filter_map(|e| e.ok()) { let map = mkmap(&e); println!("{}", serde_yaml::to_string(&map).unwrap()); } } Ok(()) } fn mkmap(e: &DirEntry) -> BTreeMap<&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 }