pub struct Uuid { /* private fields */ }Expand description
A universally unique identifier (UUID).
Support for UUID Version::Nil, Version::Max, Version::V4 (random) and Version::V7 (timestamp + counter + random).
Implementations§
Source§impl Uuid
impl Uuid
Sourcepub const NIL: Uuid
pub const NIL: Uuid
The nil UUID (all zeros).
Example:
let uuid = Uuid::NIL;
assert_eq!(
"00000000-0000-0000-0000-000000000000",
uuid.to_string(),
);Sourcepub const MAX: Uuid
pub const MAX: Uuid
The max UUID (all ones).
Example:
let uuid = Uuid::MAX;
assert_eq!(
"ffffffff-ffff-ffff-ffff-ffffffffffff",
uuid.to_string(),
);Sourcepub fn from_random_bytes_v4(counter_random_bytes: [u8; 16]) -> Uuid
pub fn from_random_bytes_v4(counter_random_bytes: [u8; 16]) -> Uuid
Create a UUID v4 from explicit random bytes.
This method assumes the bytes are already sufficiently random, it will only set the appropriate bits for the UUID version and variant.
§Example
// Use the `ReducerContext::rng()` method to generate random bytes in reducers,
// or call `ReducerContext::new_uuid_v4`
let random_bytes = [0u8; 16];
let uuid = Uuid::from_random_bytes_v4(random_bytes);
assert_eq!(
"00000000-0000-4000-8000-000000000000",
uuid.to_string(),
);Sourcepub fn from_counter_v7(
counter: &Cell<u32>,
now: Timestamp,
random_bytes: &[u8; 4],
) -> Result<Uuid, Error>
pub fn from_counter_v7( counter: &Cell<u32>, now: Timestamp, random_bytes: &[u8; 4], ) -> Result<Uuid, Error>
Generate a UUID v7 using a monotonic counter from 0 to 2^31-1, a timestamp, and 4 random bytes.
The counter will wrap around on overflow.
The UUID v7 is structured as follows:
┌───────────────────────────────────────────────┬───────────────────┐
| B0 | B1 | B2 | B3 | B4 | B5 | B6 |
├───────────────────────────────────────────────┼───────────────────┤
| unix_ts_ms | version 7 |
└───────────────────────────────────────────────┴───────────────────┘
┌──────────────┬─────────┬──────────────────┬───────────────────────┐
| B7 | B8 | B9 | B10 | B11 | B12 | B13 | B14 | B15 |
├──────────────┼─────────┼──────────────────┼───────────────────────┤
| counter_high | variant | counter_low | random |
└──────────────┴─────────┴──────────────────┴───────────────────────┘§Panics
Panics if the counter value is negative, or the timestamp is before the Unix epoch.
§Example
use spacetimedb_sats::uuid::Uuid;
use spacetimedb_sats::timestamp::Timestamp;
let now = Timestamp::from_micros_since_unix_epoch(1_686_000_000_000);
let counter = std::cell::Cell::new(1);
// Use the `ReducerContext::rng()` | `ProcedureContext::rng()` to generate random bytes,
// or call `ReducerContext::new_uuid_v7()` / `ProcedureContext::new_uuid_v7()`
let random_bytes = [0u8; 4];
let uuid = Uuid::from_counter_v7(&counter, now, &random_bytes).unwrap();
assert_eq!(
"0000647e-5180-7000-8000-000200000000",
uuid.to_string(),
);Sourcepub fn parse_str(s: &str) -> Result<Uuid, Error>
pub fn parse_str(s: &str) -> Result<Uuid, Error>
Parse a UUID from a string representation.
Any of the formats generated by this module (simple, hyphenated, urn, Microsoft GUID) are supported by this parsing function.
§Example
let s = "01888d6e-5c00-7000-8000-000000000000";
let uuid = Uuid::parse_str(s).unwrap();
assert_eq!(
s,
uuid.to_string(),
);Sourcepub fn get_version(&self) -> Option<Version>
pub fn get_version(&self) -> Option<Version>
Returns the version of the UUID.
This represents the algorithm used to generate the value.
If the version field doesn’t contain a recognized version then None
is returned.
pub fn from_u128(u: u128) -> Uuid
pub fn as_u128(&self) -> u128
Trait Implementations§
Source§impl<'de> Deserialize<'de> for Uuid
impl<'de> Deserialize<'de> for Uuid
Source§fn deserialize<D>(
deserializer: D,
) -> Result<Uuid, <D as Deserializer<'de>>::Error>where
D: Deserializer<'de>,
fn deserialize<D>(
deserializer: D,
) -> Result<Uuid, <D as Deserializer<'de>>::Error>where
D: Deserializer<'de>,
deserializer.Source§impl From<Uuid> for AlgebraicValue
impl From<Uuid> for AlgebraicValue
Source§fn from(value: Uuid) -> AlgebraicValue
fn from(value: Uuid) -> AlgebraicValue
Source§impl GroundSpacetimeType for Uuid
impl GroundSpacetimeType for Uuid
Source§fn get_type() -> AlgebraicType
fn get_type() -> AlgebraicType
AlgebraicType representation of Self.Source§impl Ord for Uuid
impl Ord for Uuid
Source§impl PartialOrd for Uuid
impl PartialOrd for Uuid
Source§impl Serialize for Uuid
impl Serialize for Uuid
Source§fn serialize<S>(
&self,
__serializer: S,
) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>where
S: Serializer,
fn serialize<S>(
&self,
__serializer: S,
) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>where
S: Serializer,
self in the data format of S using the provided serializer.Source§impl SpacetimeType for Uuid
impl SpacetimeType for Uuid
Source§fn make_type<S>(_ts: &mut S) -> AlgebraicTypewhere
S: TypespaceBuilder,
fn make_type<S>(_ts: &mut S) -> AlgebraicTypewhere
S: TypespaceBuilder,
AlgebraicType representing the type for Self in SATS
and in the typing context in typespace. This is used by the
automatic type registration system in Rust modules. Read moreimpl Copy for Uuid
impl Eq for Uuid
impl StructuralPartialEq for Uuid
Auto Trait Implementations§
impl Freeze for Uuid
impl RefUnwindSafe for Uuid
impl Send for Uuid
impl Sync for Uuid
impl Unpin for Uuid
impl UnwindSafe for Uuid
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Satn for T
impl<T> Satn for T
Source§fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>
fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>
f.Source§fn fmt_psql(
&self,
f: &mut Formatter<'_>,
ty: &PsqlType<'_>,
) -> Result<(), Error>
fn fmt_psql( &self, f: &mut Formatter<'_>, ty: &PsqlType<'_>, ) -> Result<(), Error>
f.Source§fn to_satn(&self) -> String
fn to_satn(&self) -> String
String.Source§fn to_satn_pretty(&self) -> String
fn to_satn_pretty(&self) -> String
String.