scru64

Crates.ioscru64
lib.rsscru64
version2.0.1
sourcesrc
created_at2023-03-15 13:04:35.49693
updated_at2024-09-15 05:19:41.568549
descriptionSCRU64: Sortable, Clock-based, Realm-specifically Unique identifier
homepage
repositoryhttps://github.com/scru64/rust
max_upload_size
id810687
size103,494
LiosK (LiosK)

documentation

README

SCRU64: Sortable, Clock-based, Realm-specifically Unique identifier

Crates.io License

SCRU64 ID offers compact, time-ordered unique identifiers generated by distributed nodes. SCRU64 has the following features:

  • 63-bit non-negative integer storable as signed/unsigned 64-bit integer
  • Sortable by generation time (as integer and as text)
  • 12-digit case-insensitive textual representation (Base36)
  • ~38-bit Unix epoch-based timestamp that ensures useful life until year 4261
  • Variable-length node/machine ID and counter fields that share 24 bits
// pass node ID through environment variable
// (e.g., SCRU64_NODE_SPEC=42/8 command ...)

// generate a new identifier object
let x = scru64::new_sync();
println!("{}", x); // e.g., "0u2r85hm2pt3"
println!("{}", x.to_u64()); // as a 64-bit unsigned integer

// generate a textual representation directly
println!("{}", scru64::new_string_sync()); // e.g., "0u2r85hm2pt4"

See SCRU64 Specification for details.

SCRU64's uniqueness is realm-specific, i.e., dependent on the centralized assignment of node ID to each generator. If you need decentralized, globally unique time-ordered identifiers, consider SCRU128.

Crate features

Default features:

  • std integrates the library with, among others, the system clock to draw current timestamps. Without std, this crate provides limited functionality available under no_std environments.
  • global_gen (implies std) enables the new(), new_string(), new_sync(), and new_string_sync() primary entry point functions as well as the process-wide global generator under the hood.

Optional features:

  • serde enables serialization/deserialization via serde.

License

Licensed under the Apache License, Version 2.0.

See also

Commit count: 88

cargo fmt