tweak
This commit is contained in:
parent
8a79e737fc
commit
98a8a26fe9
1 changed files with 14 additions and 5 deletions
19
src/julid.rs
19
src/julid.rs
|
@ -17,6 +17,7 @@ pub const TIME_BITS: u8 = 48;
|
||||||
pub const COUNTER_BITS: u8 = 16;
|
pub const COUNTER_BITS: u8 = 16;
|
||||||
/// The number of random bits + bits in the monotonic counter
|
/// The number of random bits + bits in the monotonic counter
|
||||||
pub const UNIQUE_BITS: u8 = 80;
|
pub const UNIQUE_BITS: u8 = 80;
|
||||||
|
/// The number of fully random bits
|
||||||
pub const RANDOM_BITS: u8 = 64;
|
pub const RANDOM_BITS: u8 = 64;
|
||||||
|
|
||||||
macro_rules! bitmask {
|
macro_rules! bitmask {
|
||||||
|
@ -114,28 +115,31 @@ impl Julid {
|
||||||
Julid(u128::MAX)
|
Julid(u128::MAX)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Gets the timestamp section of this ulid
|
/// Gets the timestamp section of this julid
|
||||||
pub const fn timestamp(&self) -> u64 {
|
pub const fn timestamp(&self) -> u64 {
|
||||||
(self.0 >> UNIQUE_BITS) as u64
|
(self.0 >> UNIQUE_BITS) as u64
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Gets the value of this julid's monotonic counter
|
||||||
pub const fn counter(&self) -> u16 {
|
pub const fn counter(&self) -> u16 {
|
||||||
let mask = bitmask!(COUNTER_BITS);
|
let mask = bitmask!(COUNTER_BITS);
|
||||||
((self.0 >> RANDOM_BITS) & mask) as u16
|
((self.0 >> RANDOM_BITS) & mask) as u16
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Gets the 64-bit concatenation of the timestamp and counter
|
||||||
pub const fn sortable(&self) -> u64 {
|
pub const fn sortable(&self) -> u64 {
|
||||||
let mask = bitmask!(TIME_BITS + COUNTER_BITS);
|
let mask = bitmask!(TIME_BITS + COUNTER_BITS);
|
||||||
((self.0 >> RANDOM_BITS) & mask) as u64
|
((self.0 >> RANDOM_BITS) & mask) as u64
|
||||||
}
|
}
|
||||||
|
|
||||||
pub const fn random(&self) -> u128 {
|
/// Gets the 64-bit random value
|
||||||
self.0 & bitmask!(RANDOM_BITS)
|
pub const fn random(&self) -> u64 {
|
||||||
|
(self.0 & bitmask!(RANDOM_BITS)) as u64
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Gets the non-timestamp section of this Julid (random + counter bits).
|
/// Gets the non-timestamp section of this Julid (random + counter bits).
|
||||||
pub const fn unique(&self) -> u128 {
|
pub const fn unique(&self) -> u64 {
|
||||||
self.0 & bitmask!(UNIQUE_BITS)
|
(self.0 & bitmask!(UNIQUE_BITS)) as u64
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Creates a Crockford Base32 encoded string that represents this Julid
|
/// Creates a Crockford Base32 encoded string that represents this Julid
|
||||||
|
@ -157,6 +161,11 @@ impl Julid {
|
||||||
self.0 == 0u128
|
self.0 == 0u128
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Test if the Julid is Omega
|
||||||
|
pub const fn is_omega(&self) -> bool {
|
||||||
|
self.0 == u128::MAX
|
||||||
|
}
|
||||||
|
|
||||||
/// Creates a Julid using the provided bytes array, assumed big-endian.
|
/// Creates a Julid using the provided bytes array, assumed big-endian.
|
||||||
pub const fn from_bytes(bytes: [u8; 16]) -> Julid {
|
pub const fn from_bytes(bytes: [u8; 16]) -> Julid {
|
||||||
Self(u128::from_be_bytes(bytes))
|
Self(u128::from_be_bytes(bytes))
|
||||||
|
|
Loading…
Reference in a new issue