tiberius/tds/codec/column_data/
float.rs

1use crate::{error::Error, sql_read_bytes::SqlReadBytes, ColumnData};
2
3pub(crate) async fn decode<R>(src: &mut R, type_len: usize) -> crate::Result<ColumnData<'static>>
4where
5    R: SqlReadBytes + Unpin,
6{
7    let len = src.read_u8().await? as usize;
8
9    let res = match (len, type_len) {
10        (0, 4) => ColumnData::F32(None),
11        (0, _) => ColumnData::F64(None),
12        (4, _) => ColumnData::F32(Some(src.read_f32_le().await?)),
13        (8, _) => ColumnData::F64(Some(src.read_f64_le().await?)),
14        _ => {
15            return Err(Error::Protocol(
16                format!("floatn: length of {} is invalid", len).into(),
17            ))
18        }
19    };
20
21    Ok(res)
22}