tiberius/tds/codec/column_data/
datetimen.rs

1use crate::{
2    error::Error,
3    sql_read_bytes::SqlReadBytes,
4    time::{DateTime, SmallDateTime},
5    ColumnData,
6};
7
8pub(crate) async fn decode<R>(src: &mut R, rlen: u8, len: u8) -> crate::Result<ColumnData<'static>>
9where
10    R: SqlReadBytes + Unpin,
11{
12    let datetime = match (rlen, len) {
13        (0, 4) => ColumnData::SmallDateTime(None),
14        (0, 8) => ColumnData::DateTime(None),
15        (4, _) => ColumnData::SmallDateTime(Some(SmallDateTime::decode(src).await?)),
16        (8, _) => ColumnData::DateTime(Some(DateTime::decode(src).await?)),
17        _ => {
18            return Err(Error::Protocol(
19                format!("datetimen: length of {} is invalid", len).into(),
20            ))
21        }
22    };
23
24    Ok(datetime)
25}