use anyhow::{Context, Result};
use clap::Parser;
use std::env;
use std::path::PathBuf;
use std::thread;
use std::time::Duration;
#[derive(Debug, Parser)]
struct Cli {
pattern: String,
path: PathBuf,
#[arg(short, long, default_value_t = false)]
slow: bool,
#[arg(short, long, default_value_t = false)]
verbose: bool,
}
fn slow_func() {
const N: u64 = 10;
let pb = indicatif::ProgressBar::new(N);
for _ in 0..N {
thread::sleep(Duration::from_secs(1));
pb.inc(1);
}
pb.finish_with_message("done");
}
fn main() -> Result<()> {
let args = Cli::parse();
if args.verbose {
env::set_var("RUST_LOG", "debug");
}
env_logger::init();
log::debug!("grrs starting up...");
let content = std::fs::read_to_string(&args.path)
.with_context(|| format!("Error reading file: {:?}", &args.path))?;
log::debug!("{:?}", args);
grrs_masterbongo::find_matches(&content, &args.pattern, std::io::stdout());
if args.slow {
slow_func();
}
Ok(())
}