summaryrefslogtreecommitdiff
path: root/meap/meap-code/ch9/ch9-clock1/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'meap/meap-code/ch9/ch9-clock1/src/main.rs')
-rwxr-xr-xmeap/meap-code/ch9/ch9-clock1/src/main.rs53
1 files changed, 53 insertions, 0 deletions
diff --git a/meap/meap-code/ch9/ch9-clock1/src/main.rs b/meap/meap-code/ch9/ch9-clock1/src/main.rs
new file mode 100755
index 0000000..7f3c941
--- /dev/null
+++ b/meap/meap-code/ch9/ch9-clock1/src/main.rs
@@ -0,0 +1,53 @@
+extern crate chrono;
+extern crate clap;
+
+use clap::{App,Arg};
+use chrono::{DateTime}; // date type
+use chrono::{Local}; // timezone types
+
+struct Clock;
+
+impl Clock {
+ fn get() -> DateTime<Local> {
+ Local::now()
+ }
+
+ fn set() -> ! {
+ unimplemented!()
+ }
+}
+
+fn main() {
+ let app = App::new("clock")
+ .version("0.1")
+ .about("Gets and sets (aspirationally) the time.")
+ .arg(Arg::with_name("action")
+ .takes_value(true)
+ .possible_values(&["get", "set"])
+ .default_value("get"))
+ .arg(Arg::with_name("std")
+ .short("s")
+ .long("use-standard")
+ .takes_value(true)
+ .possible_values(&["rfc2822", "rfc3339", "timestamp"])
+ .default_value("rfc3339"))
+ .arg(Arg::with_name("datetime")
+ .help("When <action> is 'set', apply <datetime>. Otherwise, ignore."));
+
+ let args = app.get_matches();
+
+ let action = args.value_of("std").unwrap(); // default_value() has been supplied,
+ let std = args.value_of("std").unwrap(); // so it's safe to use .unwrap()
+
+ if action == "set" {
+ unimplemented!() // break early
+ }
+
+ let now = Clock::get();
+ match std {
+ "timestamp" => println!("{}", now.timestamp()),
+ "rfc2822" => println!("{}", now.to_rfc2822()),
+ "rfc3339" => println!("{}", now.to_rfc3339()),
+ _ => unreachable!(),
+ }
+}