Skip to content

Commit

Permalink
Merge pull request #535 from KodrAus/chore/housekeeping
Browse files Browse the repository at this point in the history
Make more things const
  • Loading branch information
KodrAus committed Oct 28, 2021
2 parents e51f80a + e9d27ae commit 07f920f
Showing 1 changed file with 54 additions and 52 deletions.
106 changes: 54 additions & 52 deletions src/lib.rs
Expand Up @@ -307,7 +307,7 @@ impl Uuid {
/// Currently only the RFC4122 variant is generated by this module.
///
/// * [Variant Reference](http://tools.ietf.org/html/rfc4122#section-4.1.1)
pub fn get_variant(&self) -> Option<Variant> {
pub const fn get_variant(&self) -> Option<Variant> {
match self.as_bytes()[8] {
x if x & 0x80 == 0x00 => Some(Variant::NCS),
x if x & 0xc0 == 0x80 => Some(Variant::RFC4122),
Expand Down Expand Up @@ -335,7 +335,7 @@ impl Uuid {
/// Returns the version of the UUID.
///
/// This represents the algorithm used to generate the contents
pub fn get_version(&self) -> Option<Version> {
pub const fn get_version(&self) -> Option<Version> {
let v = self.as_bytes()[6] >> 4;
match v {
0 if self.is_nil() => Some(Version::Nil),
Expand Down Expand Up @@ -392,19 +392,21 @@ impl Uuid {
/// }
/// ```
pub fn as_fields(&self) -> (u32, u16, u16, &[u8; 8]) {
let d1 = u32::from(self.as_bytes()[0]) << 24
| u32::from(self.as_bytes()[1]) << 16
| u32::from(self.as_bytes()[2]) << 8
| u32::from(self.as_bytes()[3]);
let bytes = self.as_bytes();

let d1 = (bytes[0] as u32) << 24
| (bytes[1] as u32) << 16
| (bytes[2] as u32) << 8
| (bytes[3] as u32);

let d2 =
u16::from(self.as_bytes()[4]) << 8 | u16::from(self.as_bytes()[5]);
(bytes[4] as u16) << 8 | (bytes[5] as u16);

let d3 =
u16::from(self.as_bytes()[6]) << 8 | u16::from(self.as_bytes()[7]);
(bytes[6] as u16) << 8 | (bytes[7] as u16);

let d4: &[u8; 8] =
convert::TryInto::try_into(&self.as_bytes()[8..16]).unwrap();
convert::TryInto::try_into(&bytes[8..16]).unwrap();
(d1, d2, d3, d4)
}

Expand Down Expand Up @@ -435,16 +437,16 @@ impl Uuid {
/// }
/// ```
pub fn to_fields_le(&self) -> (u32, u16, u16, &[u8; 8]) {
let d1 = u32::from(self.as_bytes()[0])
| u32::from(self.as_bytes()[1]) << 8
| u32::from(self.as_bytes()[2]) << 16
| u32::from(self.as_bytes()[3]) << 24;
let d1 = (self.as_bytes()[0] as u32)
| (self.as_bytes()[1] as u32) << 8
| (self.as_bytes()[2] as u32) << 16
| (self.as_bytes()[3] as u32) << 24;

let d2 =
u16::from(self.as_bytes()[4]) | u16::from(self.as_bytes()[5]) << 8;
(self.as_bytes()[4] as u16) | (self.as_bytes()[5] as u16) << 8;

let d3 =
u16::from(self.as_bytes()[6]) | u16::from(self.as_bytes()[7]) << 8;
(self.as_bytes()[6] as u16) | (self.as_bytes()[7] as u16) << 8;

let d4: &[u8; 8] =
convert::TryInto::try_into(&self.as_bytes()[8..16]).unwrap();
Expand All @@ -470,23 +472,23 @@ impl Uuid {
/// Ok(())
/// }
/// ```
pub fn as_u128(&self) -> u128 {
u128::from(self.as_bytes()[0]) << 120
| u128::from(self.as_bytes()[1]) << 112
| u128::from(self.as_bytes()[2]) << 104
| u128::from(self.as_bytes()[3]) << 96
| u128::from(self.as_bytes()[4]) << 88
| u128::from(self.as_bytes()[5]) << 80
| u128::from(self.as_bytes()[6]) << 72
| u128::from(self.as_bytes()[7]) << 64
| u128::from(self.as_bytes()[8]) << 56
| u128::from(self.as_bytes()[9]) << 48
| u128::from(self.as_bytes()[10]) << 40
| u128::from(self.as_bytes()[11]) << 32
| u128::from(self.as_bytes()[12]) << 24
| u128::from(self.as_bytes()[13]) << 16
| u128::from(self.as_bytes()[14]) << 8
| u128::from(self.as_bytes()[15])
pub const fn as_u128(&self) -> u128 {
(self.as_bytes()[0] as u128) << 120
| (self.as_bytes()[1] as u128) << 112
| (self.as_bytes()[2] as u128) << 104
| (self.as_bytes()[3] as u128) << 96
| (self.as_bytes()[4] as u128) << 88
| (self.as_bytes()[5] as u128) << 80
| (self.as_bytes()[6] as u128) << 72
| (self.as_bytes()[7] as u128) << 64
| (self.as_bytes()[8] as u128) << 56
| (self.as_bytes()[9] as u128) << 48
| (self.as_bytes()[10] as u128) << 40
| (self.as_bytes()[11] as u128) << 32
| (self.as_bytes()[12] as u128) << 24
| (self.as_bytes()[13] as u128) << 16
| (self.as_bytes()[14] as u128) << 8
| (self.as_bytes()[15] as u128)
}

/// Returns a 128bit little-endian value containing the UUID data.
Expand Down Expand Up @@ -515,23 +517,23 @@ impl Uuid {
/// Ok(())
/// }
/// ```
pub fn to_u128_le(&self) -> u128 {
u128::from(self.as_bytes()[0])
| u128::from(self.as_bytes()[1]) << 8
| u128::from(self.as_bytes()[2]) << 16
| u128::from(self.as_bytes()[3]) << 24
| u128::from(self.as_bytes()[4]) << 32
| u128::from(self.as_bytes()[5]) << 40
| u128::from(self.as_bytes()[6]) << 48
| u128::from(self.as_bytes()[7]) << 56
| u128::from(self.as_bytes()[8]) << 64
| u128::from(self.as_bytes()[9]) << 72
| u128::from(self.as_bytes()[10]) << 80
| u128::from(self.as_bytes()[11]) << 88
| u128::from(self.as_bytes()[12]) << 96
| u128::from(self.as_bytes()[13]) << 104
| u128::from(self.as_bytes()[14]) << 112
| u128::from(self.as_bytes()[15]) << 120
pub const fn to_u128_le(&self) -> u128 {
(self.as_bytes()[0] as u128)
| (self.as_bytes()[1] as u128) << 8
| (self.as_bytes()[2] as u128) << 16
| (self.as_bytes()[3] as u128) << 24
| (self.as_bytes()[4] as u128) << 32
| (self.as_bytes()[5] as u128) << 40
| (self.as_bytes()[6] as u128) << 48
| (self.as_bytes()[7] as u128) << 56
| (self.as_bytes()[8] as u128) << 64
| (self.as_bytes()[9] as u128) << 72
| (self.as_bytes()[10] as u128) << 80
| (self.as_bytes()[11] as u128) << 88
| (self.as_bytes()[12] as u128) << 96
| (self.as_bytes()[13] as u128) << 104
| (self.as_bytes()[14] as u128) << 112
| (self.as_bytes()[15] as u128) << 120
}

/// Returns two 64bit values containing the UUID data.
Expand All @@ -555,7 +557,7 @@ impl Uuid {
/// Ok(())
/// }
/// ```
pub fn as_u64_pair(&self) -> (u64, u64) {
pub const fn as_u64_pair(&self) -> (u64, u64) {
let value = self.as_u128();
((value >> 64) as u64, value as u64)
}
Expand All @@ -566,8 +568,8 @@ impl Uuid {
}

/// Tests if the UUID is nil.
pub fn is_nil(&self) -> bool {
self.as_bytes().iter().all(|&b| b == 0)
pub const fn is_nil(&self) -> bool {
self.as_u128() == 0
}

/// A buffer that can be used for `encode_...` calls, that is
Expand Down

0 comments on commit 07f920f

Please sign in to comment.