nurtex_codec/types/extra/
uuid.rs1use 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}