use crate::{Variant, UUID};
impl UUID {
#[must_use]
pub const fn get_variant(&self) -> Variant {
match self.bytes[8] {
0x00..=0x7F => Variant::NCS,
0x80..=0xBF => Variant::OSF,
0xC0..=0xDF => Variant::DCOM,
0xE0..=0xFF => Variant::Reserved,
}
}
}
#[cfg(test)]
mod tests {
use super::{Variant, UUID};
const fn create_uuid_with_variant_byte(variant_byte: u8) -> UUID {
let mut bytes = [0u8; 16];
bytes[8] = variant_byte;
UUID { bytes }
}
#[test]
fn test_variant_ncs() {
let uuid_lower = create_uuid_with_variant_byte(0x00);
assert_eq!(uuid_lower.get_variant(), Variant::NCS);
let uuid_middle = create_uuid_with_variant_byte(0x42);
assert_eq!(uuid_middle.get_variant(), Variant::NCS);
let uuid_upper = create_uuid_with_variant_byte(0x7F);
assert_eq!(uuid_upper.get_variant(), Variant::NCS);
}
#[test]
fn test_variant_osf() {
let uuid_lower = create_uuid_with_variant_byte(0x80);
assert_eq!(uuid_lower.get_variant(), Variant::OSF);
let uuid_middle = create_uuid_with_variant_byte(0xA9);
assert_eq!(uuid_middle.get_variant(), Variant::OSF);
let uuid_upper = create_uuid_with_variant_byte(0xBF);
assert_eq!(uuid_upper.get_variant(), Variant::OSF);
}
#[test]
fn test_variant_dcom() {
let uuid_lower = create_uuid_with_variant_byte(0xC0);
assert_eq!(uuid_lower.get_variant(), Variant::DCOM);
let uuid_middle = create_uuid_with_variant_byte(0xCB);
assert_eq!(uuid_middle.get_variant(), Variant::DCOM);
let uuid_upper = create_uuid_with_variant_byte(0xDF);
assert_eq!(uuid_upper.get_variant(), Variant::DCOM);
}
#[test]
fn test_variant_reserved() {
let uuid_lower = create_uuid_with_variant_byte(0xE0);
assert_eq!(uuid_lower.get_variant(), Variant::Reserved);
let uuid_middle = create_uuid_with_variant_byte(0xF0);
assert_eq!(uuid_middle.get_variant(), Variant::Reserved);
let uuid_upper = create_uuid_with_variant_byte(0xFF);
assert_eq!(uuid_upper.get_variant(), Variant::Reserved);
}
}