welds_sqlx_mssql/types/
int.rs

1use byteorder::{ByteOrder, LittleEndian};
2
3use crate::decode::Decode;
4use crate::encode::{Encode, IsNull};
5use crate::error::BoxDynError;
6use crate::protocol::type_info::{DataType, TypeInfo};
7use crate::{Mssql, MssqlTypeInfo, MssqlValueRef};
8use sqlx_core::types::Type;
9
10impl Type<Mssql> for i8 {
11    fn type_info() -> MssqlTypeInfo {
12        MssqlTypeInfo(TypeInfo::new(DataType::IntN, 1))
13    }
14
15    fn compatible(ty: &MssqlTypeInfo) -> bool {
16        matches!(ty.0.ty, DataType::TinyInt | DataType::IntN) && ty.0.size == 1
17    }
18}
19
20impl Encode<'_, Mssql> for i8 {
21    fn encode_by_ref(&self, buf: &mut Vec<u8>) -> IsNull {
22        buf.extend(&self.to_le_bytes());
23
24        IsNull::No
25    }
26}
27
28impl Decode<'_, Mssql> for i8 {
29    fn decode(value: MssqlValueRef<'_>) -> Result<Self, BoxDynError> {
30        Ok(value.as_bytes()?[0] as i8)
31    }
32}
33
34impl Type<Mssql> for i16 {
35    fn type_info() -> MssqlTypeInfo {
36        MssqlTypeInfo(TypeInfo::new(DataType::IntN, 2))
37    }
38
39    fn compatible(ty: &MssqlTypeInfo) -> bool {
40        matches!(ty.0.ty, DataType::SmallInt | DataType::IntN) && ty.0.size == 2
41    }
42}
43
44impl Encode<'_, Mssql> for i16 {
45    fn encode_by_ref(&self, buf: &mut Vec<u8>) -> IsNull {
46        buf.extend(&self.to_le_bytes());
47
48        IsNull::No
49    }
50}
51
52impl Decode<'_, Mssql> for i16 {
53    fn decode(value: MssqlValueRef<'_>) -> Result<Self, BoxDynError> {
54        Ok(LittleEndian::read_i16(value.as_bytes()?))
55    }
56}
57
58impl Type<Mssql> for i32 {
59    fn type_info() -> MssqlTypeInfo {
60        MssqlTypeInfo(TypeInfo::new(DataType::IntN, 4))
61    }
62
63    fn compatible(ty: &MssqlTypeInfo) -> bool {
64        matches!(ty.0.ty, DataType::Int | DataType::IntN) && ty.0.size == 4
65    }
66}
67
68impl Encode<'_, Mssql> for i32 {
69    fn encode_by_ref(&self, buf: &mut Vec<u8>) -> IsNull {
70        buf.extend(&self.to_le_bytes());
71
72        IsNull::No
73    }
74}
75
76impl Decode<'_, Mssql> for i32 {
77    fn decode(value: MssqlValueRef<'_>) -> Result<Self, BoxDynError> {
78        Ok(LittleEndian::read_i32(value.as_bytes()?))
79    }
80}
81
82impl Type<Mssql> for i64 {
83    fn type_info() -> MssqlTypeInfo {
84        MssqlTypeInfo(TypeInfo::new(DataType::IntN, 8))
85    }
86
87    fn compatible(ty: &MssqlTypeInfo) -> bool {
88        matches!(ty.0.ty, DataType::BigInt | DataType::IntN) && ty.0.size == 8
89    }
90}
91
92impl Encode<'_, Mssql> for i64 {
93    fn encode_by_ref(&self, buf: &mut Vec<u8>) -> IsNull {
94        buf.extend(&self.to_le_bytes());
95
96        IsNull::No
97    }
98}
99
100impl Decode<'_, Mssql> for i64 {
101    fn decode(value: MssqlValueRef<'_>) -> Result<Self, BoxDynError> {
102        Ok(LittleEndian::read_i64(value.as_bytes()?))
103    }
104}