pub struct Ulid(pub u128);
Expand description
A Ulid is a unique 128-bit lexicographically sortable identifier
Canonically, it is represented as a 26 character Crockford Base32 encoded string.
Of the 128-bits, the first 48 are a unix timestamp in milliseconds. The remaining 80 are random. The first 48 provide for lexicographic sorting and the remaining 80 ensure that the identifier is unique.
Tuple Fields§
§0: u128
Implementations§
Source§impl Ulid
impl Ulid
Sourcepub fn new() -> Ulid
pub fn new() -> Ulid
Creates a new Ulid with the current time (UTC)
Using this function to generate Ulids will not guarantee monotonic sort order. See [ulid::Generator] for a monotonic sort order.
§Example
use ulid::Ulid;
let my_ulid = Ulid::new();
Sourcepub fn with_source<R: Rng>(source: &mut R) -> Ulid
pub fn with_source<R: Rng>(source: &mut R) -> Ulid
Creates a new Ulid using data from the given random number generator
§Example
use rand::prelude::*;
use ulid::Ulid;
let mut rng = StdRng::from_entropy();
let ulid = Ulid::with_source(&mut rng);
Sourcepub fn from_datetime(datetime: SystemTime) -> Ulid
pub fn from_datetime(datetime: SystemTime) -> Ulid
Creates a new Ulid with the given datetime
This can be useful when migrating data to use Ulid identifiers.
This will take the maximum of the [SystemTime]
argument and [SystemTime::UNIX_EPOCH]
as earlier times are not valid for a Ulid timestamp
§Example
use std::time::{SystemTime, Duration};
use ulid::Ulid;
let ulid = Ulid::from_datetime(SystemTime::now());
Sourcepub fn from_datetime_with_source<R>(
datetime: SystemTime,
source: &mut R,
) -> Ulid
pub fn from_datetime_with_source<R>( datetime: SystemTime, source: &mut R, ) -> Ulid
Creates a new Ulid with the given datetime and random number generator
This will take the maximum of the [SystemTime]
argument and [SystemTime::UNIX_EPOCH]
as earlier times are not valid for a Ulid timestamp
§Example
use std::time::{SystemTime, Duration};
use rand::prelude::*;
use ulid::Ulid;
let mut rng = StdRng::from_entropy();
let ulid = Ulid::from_datetime_with_source(SystemTime::now(), &mut rng);
Sourcepub fn datetime(&self) -> SystemTime
pub fn datetime(&self) -> SystemTime
Gets the datetime of when this Ulid was created accurate to 1ms
§Example
use std::time::{SystemTime, Duration};
use ulid::Ulid;
let dt = SystemTime::now();
let ulid = Ulid::from_datetime(dt);
assert!(
dt + Duration::from_millis(1) >= ulid.datetime()
&& dt - Duration::from_millis(1) <= ulid.datetime()
);
Source§impl Ulid
impl Ulid
Sourcepub const fn from_parts(timestamp_ms: u64, random: u128) -> Ulid
pub const fn from_parts(timestamp_ms: u64, random: u128) -> Ulid
Create a Ulid from separated parts.
NOTE: Any overflow bits in the given args are discarded
§Example
use ulid::Ulid;
let ulid = Ulid::from_string("01D39ZY06FGSCTVN4T2V9PKHFZ").unwrap();
let ulid2 = Ulid::from_parts(ulid.timestamp_ms(), ulid.random());
assert_eq!(ulid, ulid2);
Sourcepub const fn from_string(encoded: &str) -> Result<Ulid, DecodeError>
pub const fn from_string(encoded: &str) -> Result<Ulid, DecodeError>
Creates a Ulid from a Crockford Base32 encoded string
An DecodeError will be returned when the given string is not formatted properly.
§Example
use ulid::Ulid;
let text = "01D39ZY06FGSCTVN4T2V9PKHFZ";
let result = Ulid::from_string(text);
assert!(result.is_ok());
assert_eq!(&result.unwrap().to_string(), text);
Sourcepub const fn nil() -> Ulid
pub const fn nil() -> Ulid
The ‘nil Ulid’.
The nil Ulid is special form of Ulid that is specified to have all 128 bits set to zero.
§Example
use ulid::Ulid;
let ulid = Ulid::nil();
assert_eq!(
ulid.to_string(),
"00000000000000000000000000"
);
Sourcepub const fn timestamp_ms(&self) -> u64
pub const fn timestamp_ms(&self) -> u64
Gets the timestamp section of this ulid
§Example
use std::time::{SystemTime, Duration};
use ulid::Ulid;
let dt = SystemTime::now();
let ulid = Ulid::from_datetime(dt);
assert_eq!(u128::from(ulid.timestamp_ms()), dt.duration_since(SystemTime::UNIX_EPOCH).unwrap_or(Duration::ZERO).as_millis());
Sourcepub const fn random(&self) -> u128
pub const fn random(&self) -> u128
Gets the random section of this ulid
§Example
use ulid::Ulid;
let text = "01D39ZY06FGSCTVN4T2V9PKHFZ";
let ulid = Ulid::from_string(text).unwrap();
let ulid_next = ulid.increment().unwrap();
assert_eq!(ulid.random() + 1, ulid_next.random());
Sourcepub fn to_str<'buf>(
&self,
buf: &'buf mut [u8],
) -> Result<&'buf mut str, EncodeError>
👎Deprecated since 1.2.0: Use the infallible array_to_str
instead.
pub fn to_str<'buf>( &self, buf: &'buf mut [u8], ) -> Result<&'buf mut str, EncodeError>
array_to_str
instead.Creates a Crockford Base32 encoded string that represents this Ulid
§Example
use ulid::Ulid;
let text = "01D39ZY06FGSCTVN4T2V9PKHFZ";
let ulid = Ulid::from_string(text).unwrap();
let mut buf = [0; ulid::ULID_LEN];
let new_text = ulid.to_str(&mut buf).unwrap();
assert_eq!(new_text, text);
Sourcepub fn array_to_str<'buf>(&self, buf: &'buf mut [u8; 26]) -> &'buf mut str
pub fn array_to_str<'buf>(&self, buf: &'buf mut [u8; 26]) -> &'buf mut str
Creates a Crockford Base32 encoded string that represents this Ulid
§Example
use ulid::Ulid;
let text = "01D39ZY06FGSCTVN4T2V9PKHFZ";
let ulid = Ulid::from_string(text).unwrap();
let mut buf = [0; ulid::ULID_LEN];
let new_text = ulid.array_to_str(&mut buf);
assert_eq!(new_text, text);
Sourcepub fn to_string(&self) -> String
pub fn to_string(&self) -> String
Creates a Crockford Base32 encoded string that represents this Ulid
§Example
use ulid::Ulid;
let text = "01D39ZY06FGSCTVN4T2V9PKHFZ";
let ulid = Ulid::from_string(text).unwrap();
assert_eq!(&ulid.to_string(), text);
Sourcepub const fn is_nil(&self) -> bool
pub const fn is_nil(&self) -> bool
Test if the Ulid is nil
§Example
use ulid::Ulid;
let ulid = Ulid::new();
assert!(!ulid.is_nil());
let nil = Ulid::nil();
assert!(nil.is_nil());
Sourcepub const fn increment(&self) -> Option<Ulid>
pub const fn increment(&self) -> Option<Ulid>
Increment the random number, make sure that the ts millis stays the same