52 lines
2.1 KiB
Markdown
52 lines
2.1 KiB
Markdown
# ulid-rs
|
|
|
|

|
|
[](https://crates.io/crates/ulid)
|
|
[](https://docs.rs/ulid)
|
|
|
|
This is a Rust implementation of the [ulid][ulid] project which provides
|
|
Universally Unique Lexicographically Sortable Identifiers.
|
|
|
|
[ulid]: https://github.com/ulid/spec
|
|
|
|
## Quickstart
|
|
|
|
```rust
|
|
use ulid::Ulid;
|
|
|
|
// Generate a ulid
|
|
let ulid = Ulid::new();
|
|
|
|
// Generate a string for a ulid
|
|
let s = ulid.to_string();
|
|
|
|
// Create from a String
|
|
let res = Ulid::from_string(&s);
|
|
|
|
assert_eq!(ulid, res.unwrap());
|
|
```
|
|
|
|
## Crate Features
|
|
|
|
* **`std` (default)**: Flag to toggle use of `std` and `rand`. Disable this flag for `#[no_std]` support.
|
|
* **`serde`**: Enables serialization and deserialization of `Ulid` types via `serde`. ULIDs are serialized using their canonical 26-character representation as defined in the ULID standard. An optional `ulid_as_u128` module is provided, which enables serialization through an `Ulid`'s inner `u128` primitive type. See the [documentation][serde_mod] and [serde docs][serde_docs] for more information.
|
|
* **`uuid`**: Implements infallible conversions between ULIDs and UUIDs from the [`uuid`][uuid] crate via the [`std::convert::From`][trait_from] trait.
|
|
|
|
[serde_mod]: https://docs.rs/ulid/latest/ulid/serde/index.html
|
|
[serde_docs]: https://serde.rs/field-attrs.html#with
|
|
[uuid]: https://github.com/uuid-rs/uuid
|
|
[trait_from]: https://doc.rust-lang.org/std/convert/trait.From.html
|
|
|
|
## Benchmark
|
|
|
|
Benchmarks were run on my desktop (Win 10/WSL2 Ubuntu; Ryzen 7 5950x). Run them yourself with `cargo bench`.
|
|
|
|
```text
|
|
test bench_from_string ... bench: 13 ns/iter (+/- 0)
|
|
test bench_from_time ... bench: 13 ns/iter (+/- 0)
|
|
test bench_generator_generate ... bench: 29 ns/iter (+/- 0)
|
|
test bench_new ... bench: 31 ns/iter (+/- 1)
|
|
test bench_to_str ... bench: 7 ns/iter (+/- 0)
|
|
test bench_to_string ... bench: 19 ns/iter (+/- 0)
|
|
```
|