extern crate clap; extern crate rrecutils; extern crate failure; mod common; use failure::Error; fn rr_select_args() -> clap::ArgMatches<'static> { clap::App::new("rr-sel") .version(common::VERSION) .author(common::AUTHOR) .about("Print records from a recfile") .arg(clap::Arg::with_name("input") .short("i") .long("input") .value_name("FILE") .help("The input recfile (or - for stdin)")) .arg(clap::Arg::with_name("output") .short("o") .long("output") .value_name("FILE") .help("The desired output location (or - for stdout)")) .arg(clap::Arg::with_name("type") .long("type") .short("t") .required(false) .takes_value(true)) .arg(clap::Arg::with_name("include-descriptors") .long("include-descriptors") .short("d") .required(false) .takes_value(false)) .arg(clap::Arg::with_name("collapse") .long("collapse") .short("C") .required(false) .takes_value(false)) .arg(clap::Arg::with_name("sort") .long("sort") .short("S") .required(false) .takes_value(true)) .arg(clap::Arg::with_name("group-by") .long("group-by") .short("G") .required(false) .takes_value(true)) .get_matches() } fn run() -> Result<(), Error> { let matches = rr_select_args(); let input = common::input_from_spec( matches.value_of("input"))?; let mut output = common::output_from_spec( matches.value_of("output"))?; let mut records = rrecutils::Recfile::parse(input)?; if let Some(typ) = matches.value_of("type") { records.filter_by_type(typ); } records.write(&mut output)?; Ok(()) } fn main() { match run() { Ok(()) => (), Err(e) => println!("{}", e), } }