feat: implement proper cli exit codes

This commit is contained in:
Mohammad Kanaan 2026-07-27 13:50:12 +03:00
parent 3a7df31b08
commit f8181ee583
3 changed files with 29 additions and 8 deletions

View file

@ -1,4 +1,8 @@
use std::process::ExitCode;
use clap::Parser; use clap::Parser;
use crate::matches::Matches;
mod matches; mod matches;
mod parser; mod parser;
@ -8,16 +12,25 @@ struct Cli {
file_path: String, file_path: String,
} }
fn main() -> anyhow::Result<()> { fn main() -> ExitCode {
match run() {
Ok(matches) if matches.is_empty() == true => ExitCode::FAILURE,
Ok(matches) => {
println!("{}", matches);
ExitCode::SUCCESS
}
Err(error) => {
eprintln!("{}", error);
ExitCode::from(2)
}
}
}
fn run() -> anyhow::Result<Matches> {
let cli = Cli::parse(); let cli = Cli::parse();
let lines_iter = parser::read_lines(&cli.file_path)?; let lines_iter = parser::read_lines(&cli.file_path)?;
let matches = parser::match_pattern(lines_iter, &cli.pattern, &cli.file_path); let matches = parser::match_pattern(lines_iter, &cli.pattern, &cli.file_path)?;
println!("Pattern: {}", cli.pattern); Ok(matches)
println!("File path: {}", cli.file_path);
println!("---");
println!("{}", matches?);
Ok(())
} }

View file

@ -11,6 +11,12 @@ pub struct Matches {
pub pattern: String, pub pattern: String,
} }
impl Matches {
pub fn is_empty(&self) -> bool {
self.items.is_empty()
}
}
impl Display for Match { impl Display for Match {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}: line {}: {}", self.file_name, self.line_number, self.text) write!(f, "{}: line {}: {}", self.file_name, self.line_number, self.text)

View file

@ -1,2 +1,4 @@
hola hola
no no
hola again
yep it's me