From 5b5d87966e6dfbd8cef3bcac9546664590d43d9e Mon Sep 17 00:00:00 2001 From: Robin Krahl Date: Mon, 7 Jan 2019 19:33:11 +0000 Subject: Implement argument handling according to spec --- Cargo.lock | 10 ++++++++++ Cargo.toml | 1 + src/main.rs | 49 ++++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 59 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 24d0405..3f41163 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,4 +1,14 @@ +[[package]] +name = "argparse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "nitrocli-otp-qr" version = "0.1.0" +dependencies = [ + "argparse 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", +] +[metadata] +"checksum argparse 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "3f8ebf5827e4ac4fd5946560e6a99776ea73b596d80898f357007317a7141e47" diff --git a/Cargo.toml b/Cargo.toml index bd186ec..8dec924 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,3 +10,4 @@ readme = "README.md" license = "MIT" [dependencies] +argparse = "0.2" diff --git a/src/main.rs b/src/main.rs index e257956..04140ed 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,50 @@ +#![warn(missing_docs, rust_2018_compatibility, rust_2018_idioms, unused)] + +//! Reads OTP configuration from a QR code and writes it to an OTP slot on a Nitrokey device. + +use std::process; + +#[derive(Debug)] +struct Options { + slot: u8, + file: Option, + name: Option, +} + +fn parse_options() -> Result { + let mut options = Options { + slot: 0, + file: None, + name: None, + }; + let mut parser = argparse::ArgumentParser::new(); + parser.set_description( + "Reads OTP configuration from a QR code and writes it to an OTP slot on a Nitrokey device.", + ); + parser.refer(&mut options.slot).required().add_argument( + "slot", + argparse::Store, + "The slot to write the OTP data to", + ); + parser.refer(&mut options.file).add_argument( + "file", + argparse::StoreOption, + "The file to read the QR code from", + ); + parser.refer(&mut options.name).add_option( + &["-n", "--name"], + argparse::StoreOption, + "The name to store in the OTP slot", + ); + parser.parse_args()?; + drop(parser); + Ok(options) +} + fn main() { - println!("nitrocli-otp-qr"); + let status = match parse_options() { + Ok(_) => 0, + Err(err) => err, + }; + process::exit(status); } -- cgit v1.2.1