blob: 9e9dc7075a70ae3e86b92efadd93fa90e923f015 [file] [log] [blame]
extern crate treeline;
use treeline::Tree;
use std::{env, io, fs};
use std::path::Path;
fn label<P: AsRef<Path>>(p: P) -> String {
p.as_ref().file_name().unwrap().to_str().unwrap().to_owned()
}
fn tree<P: AsRef<Path>>(p: P) -> io::Result<Tree<String>> {
let result = fs::read_dir(&p)?
.into_iter()
.filter_map(|e| e.ok())
.fold(Tree::root(label(p.as_ref().canonicalize()?)),
|mut root, entry| {
let dir = entry.metadata().unwrap();
if dir.is_dir() {
root.push(tree(entry.path()).unwrap());
} else {
root.push(Tree::root(label(entry.path())));
}
root
});
Ok(result)
}
fn main() {
let dir = env::args().nth(1).unwrap_or(String::from("."));
match tree(dir) {
Ok(tree) => println!("{}", tree),
Err(err) => println!("error: {}", err)
}
}