welds_sqlx_mssql/types/
int.rs1use 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}