use catalist::{content_of, file_reader, QuoteStyle};
use std::io::BufRead;
use std::io::{self, Write};
use structopt::{clap::crate_version, StructOpt};
#[derive(StructOpt, Debug)]
#[structopt(
name = "catalist",
version = crate_version!(),
author = "Robert C. <me@rob.ac>"
)]
struct Args {
#[structopt(
help = "Read input from files (stdin if omitted or - )",
allow_hyphen_values = true,
default_value = "-",
)]
files: Vec<String>,
#[structopt(
help = "Set naive quotation logic",
short, long,
parse(from_str),
case_insensitive = true,
possible_values = &QuoteStyle::variants(),
default_value = "auto",
)]
quotes: QuoteStyle,
}
#[paw::main]
fn main(args: Args) {
let mut stdout = io::stdout();
let mut exit_code = 0;
for file in args.files {
let reader = match file_reader(&file) {
Ok(rdr) => rdr,
Err(_) => {
eprintln!("'{}': unable to read file", file);
exit_code = 1;
continue;
}
};
for line in reader.lines().filter_map(Result::ok) {
let content = content_of(&line);
if let Some(text) = content {
let _ = writeln!(stdout, "{}", args.quotes.naive_surround(text));
}
}
}
std::process::exit(exit_code);
}