pub struct Builder(Uuid);
Expand description
A builder for creating a UUID.
This type is useful if you need to mutate individual fields of a Uuid
while constructing it. Since the Uuid
type is Copy
, it doesn’t offer
any methods to mutate in place. They live on the Builder
instead.
The Builder
type also always exposes APIs to construct Uuid
s for any
version without needing crate features or additional dependencies. It’s a
lower-level API than the methods on Uuid
.
§Examples
Creating a version 4 UUID from externally generated random bytes:
let random_bytes = rng();
let uuid = Builder::from_random_bytes(random_bytes).into_uuid();
assert_eq!(Some(Version::Random), uuid.get_version());
assert_eq!(Variant::RFC4122, uuid.get_variant());
Tuple Fields§
§0: Uuid
Implementations§
source§impl Builder
impl Builder
sourcepub const fn from_bytes(b: [u8; 16]) -> Builder
pub const fn from_bytes(b: [u8; 16]) -> Builder
Creates a Builder
using the supplied bytes.
§Examples
Basic usage:
let bytes = [
0xa1, 0xa2, 0xa3, 0xa4,
0xb1, 0xb2,
0xc1, 0xc2,
0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8,
];
let uuid = Builder::from_bytes(bytes).into_uuid();
assert_eq!(
"a1a2a3a4-b1b2-c1c2-d1d2-d3d4d5d6d7d8",
uuid.hyphenated().to_string(),
);
sourcepub const fn from_bytes_le(b: [u8; 16]) -> Builder
pub const fn from_bytes_le(b: [u8; 16]) -> Builder
Creates a Builder
using the supplied bytes in little endian order.
The individual fields encoded in the buffer will be flipped.
§Examples
Basic usage:
let bytes = [
0xa1, 0xa2, 0xa3, 0xa4,
0xb1, 0xb2,
0xc1, 0xc2,
0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8,
];
let uuid = Builder::from_bytes_le(bytes).into_uuid();
assert_eq!(
"a4a3a2a1-b2b1-c2c1-d1d2-d3d4d5d6d7d8",
uuid.hyphenated().to_string(),
);
sourcepub const fn from_gregorian_timestamp(
ticks: u64,
counter: u16,
node_id: &[u8; 6]
) -> Builder
pub const fn from_gregorian_timestamp( ticks: u64, counter: u16, node_id: &[u8; 6] ) -> Builder
Creates a Builder
for a version 1 UUID using the supplied timestamp, counter, and node ID.
sourcepub const fn from_md5_bytes(md5_bytes: [u8; 16]) -> Builder
pub const fn from_md5_bytes(md5_bytes: [u8; 16]) -> Builder
Creates a Builder
for a version 3 UUID using the supplied MD5 hashed bytes.
sourcepub const fn from_random_bytes(random_bytes: [u8; 16]) -> Builder
pub const fn from_random_bytes(random_bytes: [u8; 16]) -> Builder
Creates a Builder
for a version 4 UUID using the supplied random bytes.
This method assumes the bytes are already sufficiently random, it will only set the appropriate bits for the UUID version and variant.
§Examples
let random_bytes = rng();
let uuid = Builder::from_random_bytes(random_bytes).into_uuid();
assert_eq!(Some(Version::Random), uuid.get_version());
assert_eq!(Variant::RFC4122, uuid.get_variant());
sourcepub const fn from_sha1_bytes(sha1_bytes: [u8; 16]) -> Builder
pub const fn from_sha1_bytes(sha1_bytes: [u8; 16]) -> Builder
Creates a Builder
for a version 5 UUID using the supplied SHA-1 hashed bytes.
This method assumes the bytes are already a SHA-1 hash, it will only set the appropriate bits for the UUID version and variant.
sourcepub const fn from_sorted_gregorian_timestamp(
ticks: u64,
counter: u16,
node_id: &[u8; 6]
) -> Builder
pub const fn from_sorted_gregorian_timestamp( ticks: u64, counter: u16, node_id: &[u8; 6] ) -> Builder
Creates a Builder
for a version 6 UUID using the supplied timestamp, counter, and node ID.
This method will encode the ticks, counter, and node ID in a sortable UUID.
sourcepub const fn from_unix_timestamp_millis(
millis: u64,
counter_random_bytes: &[u8; 10]
) -> Builder
pub const fn from_unix_timestamp_millis( millis: u64, counter_random_bytes: &[u8; 10] ) -> Builder
Creates a Builder
for a version 7 UUID using the supplied Unix timestamp and counter bytes.
This method will set the variant field within the counter bytes without attempting to shift the data around it. Callers using the counter as a monotonic value should be careful not to store significant data in the 2 least significant bits of the 3rd byte.
§Examples
Creating a UUID using the current system timestamp:
use std::time::{Duration, SystemTime};
let ts = SystemTime::now().duration_since(SystemTime::UNIX_EPOCH)?;
let random_bytes = rng();
let uuid = Builder::from_unix_timestamp_millis(ts.as_millis().try_into()?, &random_bytes).into_uuid();
assert_eq!(Some(Version::SortRand), uuid.get_version());
assert_eq!(Variant::RFC4122, uuid.get_variant());
sourcepub const fn from_custom_bytes(custom_bytes: [u8; 16]) -> Builder
pub const fn from_custom_bytes(custom_bytes: [u8; 16]) -> Builder
Creates a Builder
for a version 8 UUID using the supplied user-defined bytes.
This method won’t interpret the given bytes in any way, except to set the appropriate bits for the UUID version and variant.
sourcepub fn from_slice(b: &[u8]) -> Result<Builder, Error>
pub fn from_slice(b: &[u8]) -> Result<Builder, Error>
Creates a Builder
using the supplied bytes.
§Errors
This function will return an error if b
has any length other than 16.
§Examples
Basic usage:
let bytes = [
0xa1, 0xa2, 0xa3, 0xa4,
0xb1, 0xb2,
0xc1, 0xc2,
0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8,
];
let uuid = Builder::from_slice(&bytes)?.into_uuid();
assert_eq!(
"a1a2a3a4-b1b2-c1c2-d1d2-d3d4d5d6d7d8",
uuid.hyphenated().to_string(),
);
sourcepub fn from_slice_le(b: &[u8]) -> Result<Builder, Error>
pub fn from_slice_le(b: &[u8]) -> Result<Builder, Error>
Creates a Builder
using the supplied bytes in little endian order.
The individual fields encoded in the buffer will be flipped.
§Errors
This function will return an error if b
has any length other than 16.
§Examples
Basic usage:
let bytes = [
0xa1, 0xa2, 0xa3, 0xa4,
0xb1, 0xb2,
0xc1, 0xc2,
0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8,
];
let uuid = Builder::from_slice_le(&bytes)?.into_uuid();
assert_eq!(
"a4a3a2a1-b2b1-c2c1-d1d2-d3d4d5d6d7d8",
uuid.hyphenated().to_string(),
);
sourcepub const fn from_fields(d1: u32, d2: u16, d3: u16, d4: &[u8; 8]) -> Builder
pub const fn from_fields(d1: u32, d2: u16, d3: u16, d4: &[u8; 8]) -> Builder
Creates a Builder
from four field values.
§Examples
Basic usage:
let d1 = 0xa1a2a3a4;
let d2 = 0xb1b2;
let d3 = 0xc1c2;
let d4 = [0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8];
let uuid = Builder::from_fields(d1, d2, d3, &d4).into_uuid();
assert_eq!(
uuid.hyphenated().to_string(),
"a1a2a3a4-b1b2-c1c2-d1d2-d3d4d5d6d7d8"
);
sourcepub const fn from_fields_le(d1: u32, d2: u16, d3: u16, d4: &[u8; 8]) -> Builder
pub const fn from_fields_le(d1: u32, d2: u16, d3: u16, d4: &[u8; 8]) -> Builder
Creates a Builder
from four field values.
§Examples
Basic usage:
let d1 = 0xa1a2a3a4;
let d2 = 0xb1b2;
let d3 = 0xc1c2;
let d4 = [0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8];
let uuid = Builder::from_fields_le(d1, d2, d3, &d4).into_uuid();
assert_eq!(
uuid.hyphenated().to_string(),
"a4a3a2a1-b2b1-c2c1-d1d2-d3d4d5d6d7d8"
);
sourcepub const fn from_u128(v: u128) -> Builder
pub const fn from_u128(v: u128) -> Builder
Creates a Builder
from a 128bit value.
§Examples
Basic usage:
let v = 0xa1a2a3a4b1b2c1c2d1d2d3d4d5d6d7d8u128;
let uuid = Builder::from_u128(v).into_uuid();
assert_eq!(
"a1a2a3a4-b1b2-c1c2-d1d2-d3d4d5d6d7d8",
uuid.hyphenated().to_string(),
);
sourcepub const fn from_u128_le(v: u128) -> Builder
pub const fn from_u128_le(v: u128) -> Builder
Creates a UUID from a 128bit value in little-endian order.
§Examples
Basic usage:
let v = 0xa1a2a3a4b1b2c1c2d1d2d3d4d5d6d7d8u128;
let uuid = Builder::from_u128_le(v).into_uuid();
assert_eq!(
"d8d7d6d5-d4d3-d2d1-c2c1-b2b1a4a3a2a1",
uuid.hyphenated().to_string(),
);
sourcepub fn set_variant(&mut self, v: Variant) -> &mut Builder
pub fn set_variant(&mut self, v: Variant) -> &mut Builder
Specifies the variant of the UUID.
sourcepub const fn with_variant(self, v: Variant) -> Builder
pub const fn with_variant(self, v: Variant) -> Builder
Specifies the variant of the UUID.
sourcepub fn set_version(&mut self, v: Version) -> &mut Builder
pub fn set_version(&mut self, v: Version) -> &mut Builder
Specifies the version number of the UUID.
sourcepub const fn with_version(self, v: Version) -> Builder
pub const fn with_version(self, v: Version) -> Builder
Specifies the version number of the UUID.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Builder
impl RefUnwindSafe for Builder
impl Send for Builder
impl Sync for Builder
impl Unpin for Builder
impl UnwindSafe for Builder
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> CheckedAs for T
impl<T> CheckedAs for T
source§fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
source§impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
source§fn checked_cast_from(src: Src) -> Option<Dst>
fn checked_cast_from(src: Src) -> Option<Dst>
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
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> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T
in a tonic::Request