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}