pants-gen 0.3.0

A password generator.
Documentation
# pants-gen

Password generator, used for [pants](https://github.com/BenPski/pants).

[Documentation](https://docs.rs/pants-gen/)

# Usage
A password generator that can be used as a library or at the command line

When using from the command line can either provide a spec string, or override the default (or
current spec string) with other arguments.


# CLI examples
Using the default spec
```bash
$ pants-gen
PHk};IUX{59!H88252x4wjD(Fg|5cva|
```

Overriding the default spec to be:
 - 3 or more uppercase letters
 - 1 to 2 lowercase letters
 - 3 or fewer numbers
 - 1 symbol
 - password of length 16
```bash
$ pants-gen --spec '16//3+|:upper://1-2|:lower://3-|:number://1|:symbol:'
8Z6TWWCARwJxC)8C
```

Overriding parts of the default spec
 - setting the length to be 12
```bash
$ pants-gen -l 12
bS),2VMV2G+T
```

Setting custom charater groups
 - disabling the symbols
 - setting an equivalent set of symbols to be !@#$%^&*|_+-=
```bash
$ pants-gen -s 0 -c '!@#$%^&*|_+-=|1+'
=LsI8=%@%GP5hMlIm%#dj9&66V9-#7h@
```

# Library examples

To generate a password build up the spec and then call `generate` to produce the password. This
function returns an `Option` since the constraints on the provided choices can't always meet
the length requirement given.
```rust
use pants_gen::password::{PasswordSpec, CharStyle};
use pants_gen::interval::Interval;
let spec = PasswordSpec::new()
    .length(16)
    .upper_at_least(1)
    .lower(Interval::new(1,10).unwrap())
    .include(CharStyle::Number.exactly(3))
    .custom(vec!['&', '^'], Interval::exactly(1));
if let Some(p) = spec.generate() {
    println!("{}", p);
} else {
    println!("Couldn't meet constraints of spec");
}
```