zuolar-galaxy 0.1.0

Practice project. A tool to search files, like `grep`
Documentation
// mod logic; // demo.rs
// mod what; // 引用別的檔案 what.rs

use anyhow::{Context, Result};
use std::{fs::read_to_string, io::stdout, path::PathBuf};
use structopt::StructOpt;
use zuolar_galaxy::find_matches;

#[derive(StructOpt)]
struct Cli {
    pattern: String,
    #[structopt(parse(from_os_str))]
    path: PathBuf,
}

fn main() -> Result<()> {
    env_logger::init();

    // let pattern = args().nth(1).expect("no pattern given");
    // let path = args().nth(2).expect("no path given");
    // let args = Cli {
    //     pattern: pattern,
    //     path: PathBuf::from(path),
    // };
    let args = Cli::from_args();
    let path = args.path.display();
    println!("get cli args = {} , {}", path, args.pattern);

    // let content = read_to_string(&args.path);
    // let content = match content {
    //     Ok(content) => content,
    //     Err(e) => {
    //         return Err(e.into());
    //     }
    // };
    let content = read_to_string(&args.path).with_context(|| format!("讀取 `{}` 失敗", path))?;
    // .map_err(|err| format!("Error reading `{}`: {}", args.path.display(), err))?;

    // demo::hello::print_hello();

    // let stdout = stdout(); // get the global stdout entity
    // let mut handle = BufWriter::new(stdout);
    // let mut handle = stdout.lock(); // acquire a lock on it

    // let pb = indicatif::ProgressBar::new(content.lines().count() as u64);

    find_matches(&content, &args.pattern, &mut stdout());
    // for (i, line) in content.lines().enumerate() {
    //     // writeln!(handle, "{}| {}", i + 1, line)?;
    //     // println!("{}| {}", i + 1, line);
    //     if line.contains(&args.pattern) {
    //         warn!("{:2}| {}", i + 1, line);
    //     } else {
    //         info!("{:2}| {}", i + 1, line);
    //     }
    //     // pb.inc(1);
    //     // sleep(Duration::from_secs(1))
    //     // pb.println(format!("[+] finished #{}", i));
    // }
    // pb.finish_with_message("done");
    Ok(())
}