nonmaxunsigned 0.1.0

A NonMax integer implementation not relying on NonZero
Documentation
# NonMax-Unsigned

This crate provides an implementation for non-max integer types
with [null-pointer-optimization].

This crate is usable in a `no-std` environment.

## Example

```rust
use nonmaxunsigned::U7;

fn main() {
    let a = U7::new(5).unwrap();
    let b = U7::new(12).unwrap();

    assert_eq!(U7::new(17).unwrap(), a + b);
    assert_eq!(None, U7::new(u8::MAX));
}
```

## Similar Crates

There are a few similar crates already existing on crates.io:

* nonmax: <https://crates.io/crates/nonmax>
* nonany: <https://crates.io/crates/nonany>
* nonn: <https://crates.io/crates/nonn>

Unlike those crates this implementation does not [NonZero](https://doc.rust-lang.org/stable/std/num/struct.NonZero.html).
Those crates store the value as `value ^ max` which is never `0` as long as `value != max`.
However this means the binary/hex representation of the stored value is hard to parse.

This implementation instead relies on a large enum `U7Internal` which has 254 variants.
Such an enum also leads to [null-pointer-optimization] but does not require the xor trick
to prevent 0 values.
Instead it relies on `core::mem::transmute_copy`.

# License

Licensed under either of

 * Apache License, Version 2.0
   ([LICENSE-APACHE]LICENSE-APACHE or <http://www.apache.org/licenses/LICENSE-2.0>)
 * MIT license
   ([LICENSE-MIT]LICENSE-MIT or <http://opensource.org/licenses/MIT>)

at your option.

[null-pointer-optimization]: https://doc.rust-lang.org/stable/std/option/index.html#representation