extern crate kairos; use kairos::timetype::TimeType as TT; fn pretty_print(tt: TT) { match tt { TT::Seconds(e) => println!("{} Seconds", e), TT::Minutes(e) => println!("{} Minutes", e), TT::Hours(e) => println!("{} Hours", e), TT::Days(e) => println!("{} Days", e), TT::Months(e) => println!("{} Months", e), TT::Years(e) => println!("{} Years", e), TT::Moment(ndt) => println!("{} ", ndt), other => println!("Cannot pretty-print: '{:?}'", other), } } fn main() { // not sure whether this is actually fast or something, but we don't care here, do we? let s = std::env::args() .skip(1) .fold(String::new(), |acc, obj| format!("{} {}", acc, obj)); let s = s.trim(); // because kairos is not yet whitespace tolerant match kairos::parser::parse(s) { Err(e) => println!("Error -> {:?}", e), Ok(kairos::parser::Parsed::TimeType(tt)) => match tt.calculate() { Ok(r) => pretty_print(r), Err(e) => println!("Error calculating: {:?}", e), }, Ok(kairos::parser::Parsed::Iterator(Ok(ui))) => { for elem in ui { match elem { Ok(r) => pretty_print(r), Err(e) => { println!("Error calculating: {:?}", e); std::process::exit(1) }, } } }, Ok(kairos::parser::Parsed::Iterator(Err(e))) => { println!("Failed building iterator: {:?}", e); }, } }