Skip to main content

nurtex_codec/types/extra/
uuid.rs

1use uuid::Uuid;
2
3use crate::Buffer;
4
5impl Buffer for Uuid {
6  fn read_buf(buffer: &mut std::io::Cursor<&[u8]>) -> Option<Self> {
7    let array = [u32::read_buf(buffer)?, u32::read_buf(buffer)?, u32::read_buf(buffer)?, u32::read_buf(buffer)?];
8
9    let most = ((array[0] as u64) << 32) | ((array[1] as u64) & 0xffffffff);
10    let least = ((array[2] as u64) << 32) | ((array[3] as u64) & 0xffffffff);
11
12    Some(Uuid::from_u128(((most as u128) << 64) | least as u128))
13  }
14
15  fn write_buf(&self, buffer: &mut impl std::io::Write) -> std::io::Result<()> {
16    let most = (self.as_u128() >> 64) as u64;
17    let least = (self.as_u128() & 0xffffffffffffffff) as u64;
18
19    let [a, b, c, d] = [(most >> 32) as u32, most as u32, (least >> 32) as u32, least as u32];
20
21    a.write_buf(buffer)?;
22    b.write_buf(buffer)?;
23    c.write_buf(buffer)?;
24    d.write_buf(buffer)?;
25    Ok(())
26  }
27}