pubky-timestamp

Crates.iopubky-timestamp
lib.rspubky-timestamp
version0.2.0
sourcesrc
created_at2024-10-17 14:03:27.204748
updated_at2024-10-17 14:40:31.082381
descriptionStrictly monotonic unix timestamp in microseconds
homepage
repositoryhttps://github.com/pubky/timestamp
max_upload_size
id1413253
size17,203
Nuh (Nuhvi)

documentation

README

Pubky timestamp

Strictly monotonic unix timestamp in microseconds.

Features

  • Strict monotonicity
  • Sortable encoding
  • Unique Id ~ish
  • String representation

Strict monotonicity

Unlike calling [SystemTime::now], calling [Timestamp::now] is guaranteed to always create an increasing timestamp, never moving back in time, nor repeating the same timestamp even if you call it many timest within the same microsecond.

Sortable encoding

Always encoded as Big-endian u64, so that it can be used as sortable keys.

String representation

If you enable base32 feature, you can also get sortable utf-8 representation of 13 characters, that are also easy to copy visually. for example 0032992ANQB5G.

If you enable httpdate you can format [Timestamp] as http date format, or parse an http date to a timestamp.

Unique Id

While it can't be used as a globally unique Id, it is unique within the same process.

Clock Ids

If you use it concurrently through different processes, each process will create a unique one-byte clock_id.

This means that if you setup your custom [TimestampFactory], you can have up to 256 processes all generating unique timestamps.

Otherwise, if you use the [DEFAULT_FACTORY], which sets the [TimestampFactory::clock_id] randomly, your chance of having unique clock ids is relative to how many processes are you running, and how often do you restart these processes.

Commit count: 5

cargo fmt