tiberius/tds/codec/column_data/
fixed_len.rs

1use crate::{sql_read_bytes::SqlReadBytes, ColumnData, FixedLenType};
2
3pub(crate) async fn decode<R>(
4    src: &mut R,
5    r#type: &FixedLenType,
6) -> crate::Result<ColumnData<'static>>
7where
8    R: SqlReadBytes + Unpin,
9{
10    let data = match r#type {
11        FixedLenType::Null => ColumnData::Bit(None),
12        FixedLenType::Bit => ColumnData::Bit(Some(src.read_u8().await? != 0)),
13        FixedLenType::Int1 => ColumnData::U8(Some(src.read_u8().await?)),
14        FixedLenType::Int2 => ColumnData::I16(Some(src.read_i16_le().await?)),
15        FixedLenType::Int4 => ColumnData::I32(Some(src.read_i32_le().await?)),
16        FixedLenType::Int8 => ColumnData::I64(Some(src.read_i64_le().await?)),
17        FixedLenType::Float4 => ColumnData::F32(Some(src.read_f32_le().await?)),
18        FixedLenType::Float8 => ColumnData::F64(Some(src.read_f64_le().await?)),
19        FixedLenType::Datetime => super::datetimen::decode(src, 8, 8).await?,
20        FixedLenType::Datetime4 => super::datetimen::decode(src, 4, 8).await?,
21        FixedLenType::Money4 => super::money::decode(src, 4).await?,
22        FixedLenType::Money => super::money::decode(src, 8).await?,
23    };
24
25    Ok(data)
26}