nurtex-codec 1.2.0

Library for serializing types from the Minecraft protocol.
Documentation
use uuid::Uuid;

use crate::Buffer;

impl Buffer for Uuid {
  fn read_buf(buffer: &mut std::io::Cursor<&[u8]>) -> Option<Self> {
    let array = [u32::read_buf(buffer)?, u32::read_buf(buffer)?, u32::read_buf(buffer)?, u32::read_buf(buffer)?];

    let most = ((array[0] as u64) << 32) | ((array[1] as u64) & 0xffffffff);
    let least = ((array[2] as u64) << 32) | ((array[3] as u64) & 0xffffffff);

    Some(Uuid::from_u128(((most as u128) << 64) | least as u128))
  }

  fn write_buf(&self, buffer: &mut impl std::io::Write) -> std::io::Result<()> {
    let most = (self.as_u128() >> 64) as u64;
    let least = (self.as_u128() & 0xffffffffffffffff) as u64;

    let [a, b, c, d] = [(most >> 32) as u32, most as u32, (least >> 32) as u32, least as u32];

    a.write_buf(buffer)?;
    b.write_buf(buffer)?;
    c.write_buf(buffer)?;
    d.write_buf(buffer)?;
    Ok(())
  }
}