tiberius/tds/codec/column_data/
guid.rs

1use uuid::Uuid;
2
3use crate::{error::Error, sql_read_bytes::SqlReadBytes, tds::codec::guid, ColumnData};
4
5pub(crate) async fn decode<R>(src: &mut R) -> crate::Result<ColumnData<'static>>
6where
7    R: SqlReadBytes + Unpin,
8{
9    let len = src.read_u8().await? as usize;
10
11    let res = match len {
12        0 => ColumnData::Guid(None),
13        16 => {
14            let mut data = [0u8; 16];
15
16            for item in &mut data {
17                *item = src.read_u8().await?;
18            }
19
20            guid::reorder_bytes(&mut data);
21            ColumnData::Guid(Some(Uuid::from_bytes(data)))
22        }
23        _ => {
24            return Err(Error::Protocol(
25                format!("guid: length of {} is invalid", len).into(),
26            ))
27        }
28    };
29
30    Ok(res)
31}