#unique-identifier #identifier #uuid #sortable

no-std ulid

a Universally Unique Lexicographically Sortable Identifier implementation

22 releases (7 stable)

new 1.1.4 Jan 9, 2025
1.1.3 Jul 13, 2024
1.1.2 Feb 3, 2024
1.1.0 Sep 11, 2023
0.2.2 Jul 28, 2017

#13 in Algorithms

Download history 65405/week @ 2024-09-21 65742/week @ 2024-09-28 63622/week @ 2024-10-05 73828/week @ 2024-10-12 88647/week @ 2024-10-19 87284/week @ 2024-10-26 92357/week @ 2024-11-02 85916/week @ 2024-11-09 88136/week @ 2024-11-16 76977/week @ 2024-11-23 91304/week @ 2024-11-30 88273/week @ 2024-12-07 86573/week @ 2024-12-14 32895/week @ 2024-12-21 37523/week @ 2024-12-28 86151/week @ 2025-01-04

256,874 downloads per month
Used in 348 crates (166 directly)

MIT license

42KB
701 lines

ulid-rs

Build Status Crates.io docs.rs

This is a Rust implementation of the ulid project which provides Universally Unique Lexicographically Sortable Identifiers.

Quickstart

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 and serde docs for more information.
  • uuid: Implements infallible conversions between ULIDs and UUIDs from the uuid crate via the std::convert::From trait.

Benchmark

Benchmarks were run on my desktop (Win 10/WSL2 Ubuntu; Ryzen 7 5950x). Run them yourself with cargo bench.

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)

Dependencies

~0–1MB
~20K SLoC