fe-cli-vgd 0.1.0

A tool to search files
Documentation
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 to search with.
    pattern: String,
    // file whose contents are to be searched.
    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(())
}