From 09280123b1f225b79bd5ff23268c7b1229fd779c Mon Sep 17 00:00:00 2001 From: Harald Eilertsen Date: Wed, 1 Jan 2025 18:44:15 +0100 Subject: Improva error messages when missing cmd line args. --- src/main.rs | 41 +++++++++++++++++++++++++++++++---------- 1 file changed, 31 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/main.rs b/src/main.rs index 060dd84..f9c9685 100644 --- a/src/main.rs +++ b/src/main.rs @@ -17,8 +17,10 @@ use ical; use chrono::{DateTime, TimeZone, Utc}; use regex::RegexBuilder; +use std::error::Error; use std::fs::File; use std::io::BufReader; +use std::path::{Path, PathBuf}; fn parse_datetime(datetime: Option) -> Option> { if let Some(mut dt) = datetime { @@ -56,7 +58,7 @@ fn print_event(event: &ical::parser::ical::component::IcalEvent) { summary); } -fn read_icalendar_from_file(filename: &str) -> std::io::Result> { +fn read_icalendar_from_file(filename: &Path) -> std::io::Result> { let buf = BufReader::new(File::open(filename)?); Ok(ical::IcalParser::new(buf) .filter_map(|c| c.ok()) @@ -121,16 +123,35 @@ fn match_events_regardless_of_case() { assert_eq!(1, events.len()); } -fn main() { +struct IcaltoolArgs { + filename: PathBuf, + pattern: String, +} + +fn parse_args() -> Result> { let mut args = std::env::args().skip(1); - let filename = args.next().unwrap(); - let pattern = args.next().unwrap(); - let calendars = read_icalendar_from_file(&filename).unwrap(); - println!("Found {} calendard in file...", calendars.len()); - - for c in calendars { - for e in c.events.iter().filter(|e| match_event(&e, &pattern)) { - print_event(&e); + + let filename = args.next().ok_or("Missing filename")?.into(); + let pattern = args.next().ok_or("Missing pattern.")?; + + Ok(IcaltoolArgs{ filename, pattern }) +} + +fn main() { + match parse_args() { + Ok(args) => { + let calendars = read_icalendar_from_file(&args.filename).unwrap(); + println!("Found {} calendard in file...", calendars.len()); + + for c in calendars { + for e in c.events.iter().filter(|e| match_event(&e, &args.pattern)) { + print_event(&e); + } + } + }, + Err(e) => { + println!("[-] Error: {}", e); + println!("Usage: icaltool "); } } } -- cgit v1.2.3