Skip to content

scru128/rust

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

279 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SCRU128: Sortable, Clock and Random number-based Unique identifier

Crates.io License

SCRU128 ID is yet another attempt to supersede UUID for the users who need decentralized, globally unique time-ordered identifiers. SCRU128 is inspired by ULID and KSUID and has the following features:

  • 128-bit unsigned integer type
  • Sortable by generation time (as integer and as text)
  • 25-digit case-insensitive textual representation (Base36)
  • 48-bit millisecond Unix timestamp that ensures useful life until year 10889
  • Up to 281 trillion time-ordered but unpredictable unique IDs per millisecond
  • 80-bit three-layer randomness for global uniqueness
// generate a new identifier object
let x = scru128::new();
println!("{}", x); // e.g., "036z951mhjikzik2gsl81gr7l"
println!("{}", x.to_u128()); // as a 128-bit unsigned integer

// generate a textual representation directly
println!("{}", scru128::new_string()); // e.g., "036z951mhzx67t63mq9xe6q0j"

See SCRU128 Specification for details.

Crate features

Default features:

  • std enables, among others, the default timestamp source for Generator using std::time. Without std, users must provide their own time source implementing the TimeSource trait.
  • global_gen (implies std) provides the process-wide default SCRU128 generator and enables the new() and new_string() functions.

Optional features:

  • serde enables serialization/deserialization of Id via serde.
  • rand010 enables an adapter for rand::Rng to use rand (v0.10) and any other conforming random number generators with Generator.

License

Licensed under the Apache License, Version 2.0.

See also

About

SCRU128 Rust Implementation

Topics

Resources

License

Stars

Watchers

Forks

Contributors

Languages