# i0
[i0](https://thei.rs/i0) reference implementation
## usage
`cargo add i0`
```rust
use i0::{v3, Timestamp};
use rand::{TryRng, rngs::SysRng};
let mut seed: [u8; 32] = [0u8; 32];
SysRng.try_fill_bytes(&mut seed)?;
let metadata = v3::Metadata {
designation: "some user-defined string",
timestamp: &Timestamp::new(),
seed: &seed,
};
let (short: String, long: String) = v3::generate(&metadata);
```
## features
- `v3` (default) enables i0:3 generation
- `v2` enables i0:2 generation (deprecated)
- `display` used for cli tools; provides `i0::display` module to print canonical representation to stdout
- `dig` used for intentional hash collisions (e.g. in [`i0-dig`](https://crates.io/crates/i0-dig)); provides `i0::<ver>::dig`
## tooling
there are 3 separate crates for different binary tools:
- [`i0`](https://crates.io/crates/i0-cli) (i0-cli) to generate i0-dentifiers
- [`i0-dig`](https://crates.io/crates/i0-dig) tries to cause an intentional hash collision for getting vanity i0-dentifiers
- [`i0-bench`](https://crates.io/crates/i0-bench) is a small benchmarking tool, because i0 turned out surprisingly useful for comparing raw CPU compute