From 8e40b9ae042b715785004678b1bb3d3a4fca9838 Mon Sep 17 00:00:00 2001 From: Joursoir Date: Wed, 1 Mar 2023 17:59:20 +0400 Subject: initial commit --- src/lib.rs | 6 ++++++ src/main.rs | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 src/lib.rs create mode 100644 src/main.rs (limited to 'src') diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..c01823d --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,6 @@ +pub fn search<'a>(pattern: &str, contents: &'a str) -> Vec<&'a str> { + contents + .lines() + .filter(|line| line.contains(pattern)) + .collect() +} diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..76b2543 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,33 @@ +use std::error::Error; +use std::process; +use std::fs; + +use clap::Parser; + +#[derive(Parser)] +#[command(author, version, about, long_about = None)] // Read from `Cargo.toml` +struct Config { + /// The pattern to look for + pattern: String, + /// The path to the file to read + file: String, +} + +fn main() { + let config = Config::parse(); + + if let Err(e) = run(config) { + eprintln!("Error: {e}"); + process::exit(1); + } +} + +fn run(config: Config) -> Result<(), Box> { + let contents = fs::read_to_string(config.file)?; + + for line in trgrep::search(&config.pattern, &contents) { + println!("{line}"); + } + + Ok(()) +} -- cgit v1.2.3-18-g5258