welds_sqlx_mssql/types/
mod.rs

1use crate::encode::{Encode, IsNull};
2use crate::protocol::type_info::{DataType, TypeInfo};
3use crate::{Mssql, MssqlTypeInfo};
4
5mod bool;
6mod float;
7mod int;
8mod str;
9mod uint;
10
11impl<'q, T: 'q + Encode<'q, Mssql>> Encode<'q, Mssql> for Option<T> {
12    fn encode(self, buf: &mut Vec<u8>) -> IsNull {
13        if let Some(v) = self {
14            v.encode(buf)
15        } else {
16            IsNull::Yes
17        }
18    }
19
20    fn encode_by_ref(&self, buf: &mut Vec<u8>) -> IsNull {
21        if let Some(v) = self {
22            v.encode_by_ref(buf)
23        } else {
24            IsNull::Yes
25        }
26    }
27
28    fn produces(&self) -> Option<MssqlTypeInfo> {
29        if let Some(v) = self {
30            v.produces()
31        } else {
32            // MSSQL requires a special NULL type ID
33            Some(MssqlTypeInfo(TypeInfo::new(DataType::Null, 0)))
34        }
35    }
36
37    fn size_hint(&self) -> usize {
38        self.as_ref().map_or(0, Encode::size_hint)
39    }
40}