use clap;
use lich;
use std::error::Error;
const DEFAULT_CHARS: &'static [&'static str] = &[
"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M",
"N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z",
"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m",
"n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z",
"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"
];
const DEFAULT_LENGTH: usize = 24;
pub fn run(
length: Option<usize>,
chars: Option<&[&str]>
) -> Result<(), clap::Error> {
let length = length.unwrap_or(DEFAULT_LENGTH);
let chars = chars.unwrap_or(DEFAULT_CHARS);
let password = match lich::pwgen(length, chars) {
Ok(password) => password,
Err(e) => return Err(clap::Error::with_description(
e.description(),
clap::ErrorKind::Io
))
};
println!("{}", password);
Ok(())
}