uuid7

Crates.io License

An experimental implementation of the proposed UUID Version 7

```rust use uuid7::uuid7;

let uuid = uuid7(); println!("{}", uuid); // e.g. "01809424-3e59-7c05-9219-566f82fff672" println!("{:?}", uuid.as_bytes()); // as 16-byte big-endian array ```

See draft-peabody-dispatch-new-uuid-format-03.

Field and bit layout

This implementation produces identifiers with the following bit layout:

0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | unix_ts_ms | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | unix_ts_ms | ver | counter | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |var| counter | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | rand | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Where:

In the very rare circumstances where the 42-bit counter field reaches the maximum value and can no more be incremented within the same timestamp, this library increments the unix_ts_ms; therefore, the unix_ts_ms may have a larger value than that of the real-time clock. This library goes on with such larger unix_ts_ms values caused by counter overflows and system clock rollbacks as long as the difference from the system clock is small enough. If the system clock moves back more than ten seconds, this library resets the generator state and thus breaks the monotonic order of generated identifiers.

Other features

This library also supports the generation of UUID version 4:

```rust use uuid7::uuid4;

let uuid = uuid4(); println!("{}", uuid); // e.g. "2ca4b2ce-6c13-40d4-bccf-37d222820f6f" println!("{:?}", uuid.as_bytes()); // as 16-byte big-endian array ```

License

Licensed under the Apache License, Version 2.0.