use std::{
fs,
io::{self, BufReader, BufWriter, Write},
path::PathBuf,
thread::sleep,
time::Duration,
};
use anyhow::{Context, Result};
use clap::Parser;
use indicatif::ProgressIterator;
use log::debug;
#[derive(Parser, Debug)]
struct CliArgs {
pattern: String,
path: PathBuf,
}
#[test]
fn find_a_match() {
let mut result = Vec::new();
let mut input = b"lorem ipsum\ndolor sit amet".as_slice();
fe_cli_vgd::find_matches(&mut input, "lorem", &mut result).unwrap();
assert_eq!(result, b"lorem ipsum\n");
}
fn main() -> Result<()> {
env_logger::init();
let pb = indicatif::ProgressBar::new(10);
(1..=10)
.progress_with(pb)
.for_each(|_| sleep(Duration::from_millis(50)));
let args = CliArgs::parse();
debug!("Input: {:?}", args);
let file = fs::File::open(&args.path)
.with_context(|| format!("Error opening file: {}", args.path.display()))?;
debug!("File opened successfully");
let mut reader = BufReader::new(file);
let mut writer = BufWriter::new(io::stdout());
fe_cli_vgd::find_matches(&mut reader, &args.pattern, &mut writer)?;
writer.flush()?;
Ok(())
}