Struct pxid::Pxid

source ·
pub struct Pxid(_);
Expand description

Pxid Instance

Packed Data Layout

Each Pxid instance bytes uses a “packed bytes” approach. This means that bytes in a XID instance have a layout.

V V V V W W W W X X X Y Y Z Z Z
└─────┘ └─────┘ └───┘ └─┘ └───┘
   |       |      |    |    |
Prefix  Timestamp |   PID   |
                  |       Counter
                  |
              Machine ID

Implementations§

source§

impl Pxid

source

pub fn prefix(&self) -> Result<String>

Retrieves the Prefix as UTF-8 Encoded characters

source

pub fn prefix_bytes(&self) -> [u8; 4]

Retrieves the Prefix Bytes

source

pub fn timestamp(&self) -> SystemTime

Retrieves the Unix Timestamp used to build this Pxid

source

pub fn machine_id(&self) -> [u8; 3]

Retrieves the Machine Pxid used to build this Pxid

source

pub fn process_id_bytes(&self) -> [u8; 2]

Retrieves the Process Pxid Bytes

source

pub fn process_id(&self) -> u16

Retrieves the Process Pxid used to build this Pxid

source

pub fn counter_bytes(&self) -> [u8; 3]

Retrieves Counter Bytes

source

pub fn counter(&self) -> u32

Retrieves Counter value used to build the Pxid

source

pub fn new(prefix: &str) -> Result<Self>

Generates a Pxid instance using the current timestamp. This is equivalent to calling new_with_time providing SystemTime::now timestamp as seconds.

Reference

Follows the authors algorithm writen on Golang in the following source.

source

pub fn new_unchecked(prefix: &str) -> Self

Creates a new Pxid instance using the current timestamp.

Panics

If an error ocurrs creating a Pxid instance either by retrieving a Timestamp (Clock might be in an invalid state), generating the Machine Pxid, gathering the Process Pxid (PID) or generating a random value.

source

pub fn new_with_time(prefix: &str, time: u32) -> Result<Self>

Generates a Pxid instance using the passed in time seconds as an instance of u32

Reference

Follows the authors algorithm writen on Golang in the following source.

source

pub fn xid_bytes(&self) -> [u8; 12]

Retrieve the bytes corresponding to a traditional XID instance

V V V V W W W W X X X Y Y Z Z Z
└─────┘ └─────────────────────┘
   |              |
Prefix            |
                  |
                  |
                 XID
source

pub fn encode_xid(xid_bytes: &[u8; 12]) -> Result<String>

source

pub fn decode_xid(s: &str) -> Result<[u8; 12]>

Methods from Deref<Target = [u8; 16]>§

1.57.0 · source

pub fn as_slice(&self) -> &[T]

Returns a slice containing the entire array. Equivalent to &s[..].

source

pub fn each_ref(&self) -> [&T; N]

🔬This is a nightly-only experimental API. (array_methods)

Borrows each element and returns an array of references with the same size as self.

Example
#![feature(array_methods)]

let floats = [3.1, 2.7, -1.0];
let float_refs: [&f64; 3] = floats.each_ref();
assert_eq!(float_refs, [&3.1, &2.7, &-1.0]);

This method is particularly useful if combined with other methods, like map. This way, you can avoid moving the original array if its elements are not Copy.

#![feature(array_methods)]

let strings = ["Ferris".to_string(), "♥".to_string(), "Rust".to_string()];
let is_ascii = strings.each_ref().map(|s| s.is_ascii());
assert_eq!(is_ascii, [true, false, true]);

// We can still access the original array: it has not been moved.
assert_eq!(strings.len(), 3);
source

pub fn split_array_ref<const M: usize>(&self) -> (&[T; M], &[T])

🔬This is a nightly-only experimental API. (split_array)

Divides one array reference into two at an index.

The first will contain all indices from [0, M) (excluding the index M itself) and the second will contain all indices from [M, N) (excluding the index N itself).

Panics

Panics if M > N.

Examples
#![feature(split_array)]

let v = [1, 2, 3, 4, 5, 6];

{
   let (left, right) = v.split_array_ref::<0>();
   assert_eq!(left, &[]);
   assert_eq!(right, &[1, 2, 3, 4, 5, 6]);
}

{
    let (left, right) = v.split_array_ref::<2>();
    assert_eq!(left, &[1, 2]);
    assert_eq!(right, &[3, 4, 5, 6]);
}

{
    let (left, right) = v.split_array_ref::<6>();
    assert_eq!(left, &[1, 2, 3, 4, 5, 6]);
    assert_eq!(right, &[]);
}
source

pub fn rsplit_array_ref<const M: usize>(&self) -> (&[T], &[T; M])

🔬This is a nightly-only experimental API. (split_array)

Divides one array reference into two at an index from the end.

The first will contain all indices from [0, N - M) (excluding the index N - M itself) and the second will contain all indices from [N - M, N) (excluding the index N itself).

Panics

Panics if M > N.

Examples
#![feature(split_array)]

let v = [1, 2, 3, 4, 5, 6];

{
   let (left, right) = v.rsplit_array_ref::<0>();
   assert_eq!(left, &[1, 2, 3, 4, 5, 6]);
   assert_eq!(right, &[]);
}

{
    let (left, right) = v.rsplit_array_ref::<2>();
    assert_eq!(left, &[1, 2, 3, 4]);
    assert_eq!(right, &[5, 6]);
}

{
    let (left, right) = v.rsplit_array_ref::<6>();
    assert_eq!(left, &[]);
    assert_eq!(right, &[1, 2, 3, 4, 5, 6]);
}
source

pub fn as_ascii(&self) -> Option<&[AsciiChar; N]>

🔬This is a nightly-only experimental API. (ascii_char)

Converts this array of bytes into a array of ASCII characters, or returns None if any of the characters is non-ASCII.

Examples
#![feature(ascii_char)]
#![feature(const_option)]

const HEX_DIGITS: [std::ascii::Char; 16] =
    *b"0123456789abcdef".as_ascii().unwrap();

assert_eq!(HEX_DIGITS[1].as_str(), "1");
assert_eq!(HEX_DIGITS[10].as_str(), "a");
source

pub unsafe fn as_ascii_unchecked(&self) -> &[AsciiChar; N]

🔬This is a nightly-only experimental API. (ascii_char)

Converts this array of bytes into a array of ASCII characters, without checking whether they’re valid.

Safety

Every byte in the array must be in 0..=127, or else this is UB.

Trait Implementations§

source§

impl Clone for Pxid

source§

fn clone(&self) -> Pxid

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Pxid

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for Pxid

source§

fn default() -> Self

Returns the “default value” for a type. Read more
source§

impl Deref for Pxid

§

type Target = [u8; 16]

The resulting type after dereferencing.
source§

fn deref(&self) -> &Self::Target

Dereferences the value.
source§

impl Display for Pxid

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Encodes the XID instance using a subset of Base32 characters where only lowercase characters are included

source§

impl From<[u8; 16]> for Pxid

source§

fn from(value: [u8; 16]) -> Self

Converts to this type from the input type.
source§

impl FromStr for Pxid

§

type Err = Error

The associated error which can be returned from parsing.
source§

fn from_str(s: &str) -> Result<Self>

Parses a string s to return a value of this type. Read more
source§

impl Hash for Pxid

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl PartialEq<Pxid> for Pxid

source§

fn eq(&self, other: &Pxid) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl Copy for Pxid

source§

impl Eq for Pxid

source§

impl StructuralEq for Pxid

source§

impl StructuralPartialEq for Pxid

Auto Trait Implementations§

§

impl RefUnwindSafe for Pxid

§

impl Send for Pxid

§

impl Sync for Pxid

§

impl Unpin for Pxid

§

impl UnwindSafe for Pxid

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> ToOwned for Twhere T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for Twhere T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for Twhere V: MultiLane<T>,

§

fn vzip(self) -> V