Rewrites https://github.com/suyash/ulid from C++ to Rust
This exposes a single interface for Ulid creation
Ulid::new(u64, Fn() -> u8)
Takes the last 48 bits of the passed timestamp and calls the passed closure 10 times for a random value.
In place of explicit MarshalBinary and UnmarshalBinary, implements
From<[u8; 16]> and
marshal that returns 26 UTF-8 words,
ToString are also implemented.
unmarshal that works with
are also implemented.
Most benchmarks line up with similar performance from C++, with some showing improvements. Benchmarks are run on GitHub actions using criterion.