extern crate ios7crypt;
extern crate getopts;
use getopts::Options;
use std::process;
use std::env;
fn usage(brief : &String, opts : &getopts::Options) {
println!("{}", (*opts).usage(brief));
process::exit(0);
}
fn main() {
let args : Vec<String> = env::args().collect();
let program : &str = args[0].as_ref();
let brief : String = format!("Usage: {} [options]", program);
let mut opts : getopts::Options = Options::new();
opts.optflag("h", "help", "print usage info");
opts.optopt("e", "encrypt", "encrypt a password", "VAL");
opts.optopt("d", "decrypt", "decrypt a hash", "VAL");
let optresult : Result<getopts::Matches, getopts::Fail> = opts.parse(&args[1..]);
if optresult.is_err() {
usage(&brief, &opts);
}
let optmatches : getopts::Matches = optresult.unwrap();
if optmatches.opt_present("e") || optmatches.opt_present("encrypt") {
let password = optmatches.opt_str("encrypt").unwrap();
println!("{}", ios7crypt::encrypt(&password));
}
else if optmatches.opt_present("d") || optmatches.opt_present("decrypt") {
let hash = optmatches.opt_str("decrypt").unwrap();
println!("{}", ios7crypt::decrypt(&hash));
}
else {
usage(&brief, &opts);
}
}