diff options
author | Harald Eilertsen <haraldei@anduin.net> | 2025-01-01 18:44:15 +0100 |
---|---|---|
committer | Harald Eilertsen <haraldei@anduin.net> | 2025-01-01 18:44:15 +0100 |
commit | 09280123b1f225b79bd5ff23268c7b1229fd779c (patch) | |
tree | 08aaef6b3047cc1e6a89940184a5fbf21c14f87b | |
parent | 94a8985d75fe39eb273b5c399202ee656d5c69a5 (diff) | |
download | icaltool-09280123b1f225b79bd5ff23268c7b1229fd779c.tar.gz icaltool-09280123b1f225b79bd5ff23268c7b1229fd779c.tar.bz2 icaltool-09280123b1f225b79bd5ff23268c7b1229fd779c.zip |
Improva error messages when missing cmd line args.
-rw-r--r-- | src/main.rs | 41 |
1 files changed, 31 insertions, 10 deletions
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<String>) -> Option<DateTime<Utc>> { 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<Vec<ical::parser::ical::component::IcalCalendar>> { +fn read_icalendar_from_file(filename: &Path) -> std::io::Result<Vec<ical::parser::ical::component::IcalCalendar>> { 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<IcaltoolArgs, Box<dyn Error>> { 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 <filename> <patterns>"); } } } |