#[macro_use] extern crate clap; extern crate geniza; // TODO: more careful import use geniza::*; use std::path::Path; use clap::{App, SubCommand}; fn run() -> Result<()> { let matches = App::new("geniza-register") .version(env!("CARGO_PKG_VERSION")) .subcommand(SubCommand::with_name("info") .about("Reads a SLEEP dir register and shows some basic metadata") .arg_from_usage(" 'directory containing files'") .arg_from_usage(" 'prefix for each data file'")) .subcommand(SubCommand::with_name("create") .about("Creates an SLEEP directory register (with header)") .arg_from_usage(" 'directory containing files'") .arg_from_usage(" 'prefix for each data file'")) .get_matches(); match matches.subcommand() { ("info", Some(subm)) => { let dir = Path::new(subm.value_of("DIR").unwrap()); let prefix = subm.value_of("prefix").unwrap(); let sdr = SleepDirRegister::open(dir, prefix, false)?; //debug!(println!("{:?}", sdr)); println!("Entry count: {}", sdr.len()?); }, ("create", Some(subm)) => { let dir = Path::new(subm.value_of("DIR").unwrap()); let prefix = subm.value_of("prefix").unwrap(); SleepDirRegister::create(dir, prefix)?; println!("Done!"); }, _ => { println!("Missing or unimplemented command!"); println!("{}", matches.usage()); ::std::process::exit(-1); }, } Ok(()) } // TODO: is there a shorter error_chain 'main()' to use here? fn main() { if let Err(ref e) = run() { println!("error: {}", e); for e in e.iter().skip(1) { println!("caused by: {}", e); } // The backtrace is not always generated. Try to run this example // with `RUST_BACKTRACE=1`. if let Some(backtrace) = e.backtrace() { println!("backtrace: {:?}", backtrace); } ::std::process::exit(1); } }