pub struct Builder(/* private fields */);
uuid
only.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());
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<'a, T> AsTaggedExplicit<'a> for Twhere
T: 'a,
impl<'a, T> AsTaggedExplicit<'a> for Twhere
T: 'a,
source§impl<'a, T> AsTaggedImplicit<'a> for Twhere
T: 'a,
impl<'a, T> AsTaggedImplicit<'a> for Twhere
T: 'a,
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> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
§impl<T> IntoCollection<T> for T
impl<T> IntoCollection<T> for T
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> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self
with the foreground set to
value
.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red()
and
green()
, which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg()
:
use yansi::{Paint, Color};
painted.fg(Color::White);
Set foreground color to white using white()
.
use yansi::Paint;
painted.white();
source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Returns self
with the
fg()
set to
Color::BrightBlack
.
§Example
println!("{}", value.bright_black());
source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Returns self
with the
fg()
set to
Color::BrightGreen
.
§Example
println!("{}", value.bright_green());
source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Returns self
with the
fg()
set to
Color::BrightYellow
.
§Example
println!("{}", value.bright_yellow());
source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Returns self
with the
fg()
set to
Color::BrightMagenta
.
§Example
println!("{}", value.bright_magenta());
source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Returns self
with the
fg()
set to
Color::BrightWhite
.
§Example
println!("{}", value.bright_white());
source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self
with the background set to
value
.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red()
and
on_green()
, which have the same functionality but
are pithier.
§Example
Set background color to red using fg()
:
use yansi::{Paint, Color};
painted.bg(Color::Red);
Set background color to red using on_red()
.
use yansi::Paint;
painted.on_red();
source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Returns self
with the
bg()
set to
Color::BrightBlack
.
§Example
println!("{}", value.on_bright_black());
source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Returns self
with the
bg()
set to
Color::BrightGreen
.
§Example
println!("{}", value.on_bright_green());
source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Returns self
with the
bg()
set to
Color::BrightYellow
.
§Example
println!("{}", value.on_bright_yellow());
source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Returns self
with the
bg()
set to
Color::BrightBlue
.
§Example
println!("{}", value.on_bright_blue());
source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Returns self
with the
bg()
set to
Color::BrightMagenta
.
§Example
println!("{}", value.on_bright_magenta());
source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Returns self
with the
bg()
set to
Color::BrightCyan
.
§Example
println!("{}", value.on_bright_cyan());
source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Returns self
with the
bg()
set to
Color::BrightWhite
.
§Example
println!("{}", value.on_bright_white());
source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute
value
.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold()
and
underline()
, which have the same functionality
but are pithier.
§Example
Make text bold using attr()
:
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);
Make text bold using using bold()
.
use yansi::Paint;
painted.bold();
source§fn underline(&self) -> Painted<&T>
fn underline(&self) -> Painted<&T>
Returns self
with the
attr()
set to
Attribute::Underline
.
§Example
println!("{}", value.underline());
source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Returns self
with the
attr()
set to
Attribute::RapidBlink
.
§Example
println!("{}", value.rapid_blink());
source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi
Quirk
value
.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask()
and
wrap()
, which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk()
:
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);
Enable wrapping using wrap()
.
use yansi::Paint;
painted.wrap();
source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting()
due to conflicts with Vec::clear()
.
The clear()
method will be removed in a future release.
fn clear(&self) -> Painted<&T>
resetting()
due to conflicts with Vec::clear()
.
The clear()
method will be removed in a future release.source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition
value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted
only when both stdout
and stderr
are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);