summaryrefslogtreecommitdiff
path: root/meap/meap-code/ch9/ch9-clock1
diff options
context:
space:
mode:
authorAdam Carpenter <53hornet@gmail.com>2019-03-27 15:32:37 -0400
committerAdam Carpenter <53hornet@gmail.com>2019-03-27 15:32:37 -0400
commit67cdcc2e12118becb823e20a40cc2687f2b8425a (patch)
treeed92c3234b89079e6d4cf36f5e80c5ffa79def48 /meap/meap-code/ch9/ch9-clock1
parente25482fca375d318a39c3b54db396b0db6e0b263 (diff)
downloadlearning-rust-67cdcc2e12118becb823e20a40cc2687f2b8425a.tar.xz
learning-rust-67cdcc2e12118becb823e20a40cc2687f2b8425a.zip
Started Rust in Action MEAP.
Diffstat (limited to 'meap/meap-code/ch9/ch9-clock1')
-rw-r--r--meap/meap-code/ch9/ch9-clock1/Cargo.toml11
-rw-r--r--meap/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 100644
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 100644
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!(),
+ }
+}