summaryrefslogtreecommitdiff
path: root/meap/meap-code/ch9/ch9-clock1
diff options
context:
space:
mode:
authorAdam Carpenter <gitlab@53hor.net>2019-07-09 15:14:04 -0400
committerAdam Carpenter <gitlab@53hor.net>2019-07-09 15:14:04 -0400
commit7e8ee5ed9cad6484e9f13f81731b102ced58402e (patch)
tree5395402ab07bbb5a659dbd68c701e22a1227202f /meap/meap-code/ch9/ch9-clock1
downloadlearning-rust-7e8ee5ed9cad6484e9f13f81731b102ced58402e.tar.xz
learning-rust-7e8ee5ed9cad6484e9f13f81731b102ced58402e.zip
Init.
Diffstat (limited to 'meap/meap-code/ch9/ch9-clock1')
-rwxr-xr-xmeap/meap-code/ch9/ch9-clock1/Cargo.toml11
-rwxr-xr-xmeap/meap-code/ch9/ch9-clock1/src/main.rs53
2 files changed, 64 insertions, 0 deletions
diff --git a/meap/meap-code/ch9/ch9-clock1/Cargo.toml b/meap/meap-code/ch9/ch9-clock1/Cargo.toml
new file mode 100755
index 0000000..34d4928
--- /dev/null
+++ b/meap/meap-code/ch9/ch9-clock1/Cargo.toml
@@ -0,0 +1,11 @@
+[package]
+name = "clock"
+version = "0.1.1"
+authors = ["Tim McNamara <code@timmcnamara.co.nz>"]
+
+[dependencies]
+chrono = "0.4"
+clap = "2"
+
+[profile.release]
+lto = true
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!(),
+ }
+}