lich 0.2.0

Minimal password management.
Documentation
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(())
}