diff --git a/src/lib.rs b/src/lib.rs index ba9087b7..5c3b1e92 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -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 { + pub const fn get_variant(&self) -> Option { match self.as_bytes()[8] { x if x & 0x80 == 0x00 => Some(Variant::NCS), x if x & 0xc0 == 0x80 => Some(Variant::RFC4122), @@ -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 { + pub const fn get_version(&self) -> Option { let v = self.as_bytes()[6] >> 4; match v { 0 if self.is_nil() => Some(Version::Nil), @@ -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) } @@ -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(); @@ -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. @@ -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. @@ -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) } @@ -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