aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorHarald Eilertsen <haraldei@anduin.net>2025-01-01 18:44:15 +0100
committerHarald Eilertsen <haraldei@anduin.net>2025-01-01 18:44:15 +0100
commit09280123b1f225b79bd5ff23268c7b1229fd779c (patch)
tree08aaef6b3047cc1e6a89940184a5fbf21c14f87b /src
parent94a8985d75fe39eb273b5c399202ee656d5c69a5 (diff)
downloadicaltool-09280123b1f225b79bd5ff23268c7b1229fd779c.tar.gz
icaltool-09280123b1f225b79bd5ff23268c7b1229fd779c.tar.bz2
icaltool-09280123b1f225b79bd5ff23268c7b1229fd779c.zip
Improva error messages when missing cmd line args.
Diffstat (limited to 'src')
-rw-r--r--src/main.rs41
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>");
}
}
}