1use crate::decode::Decode;
2use crate::encode::{Encode, IsNull};
3use crate::error::BoxDynError;
4use crate::type_info::DataType;
5use crate::types::Type;
6use crate::{Sqlite, SqliteArgumentValue, SqliteTypeInfo, SqliteValueRef};
7
8impl Type<Sqlite> for i8 {
9 fn type_info() -> SqliteTypeInfo {
10 SqliteTypeInfo(DataType::Int4)
11 }
12
13 fn compatible(ty: &SqliteTypeInfo) -> bool {
14 matches!(ty.0, DataType::Int4 | DataType::Integer)
15 }
16}
17
18impl<'q> Encode<'q, Sqlite> for i8 {
19 fn encode_by_ref(
20 &self,
21 args: &mut Vec<SqliteArgumentValue<'q>>,
22 ) -> Result<IsNull, BoxDynError> {
23 args.push(SqliteArgumentValue::Int(*self as i32));
24
25 Ok(IsNull::No)
26 }
27}
28
29impl<'r> Decode<'r, Sqlite> for i8 {
30 fn decode(value: SqliteValueRef<'r>) -> Result<Self, BoxDynError> {
31 Ok(value.int64().try_into()?)
36 }
37}
38
39impl Type<Sqlite> for i16 {
40 fn type_info() -> SqliteTypeInfo {
41 SqliteTypeInfo(DataType::Int4)
42 }
43
44 fn compatible(ty: &SqliteTypeInfo) -> bool {
45 matches!(ty.0, DataType::Int4 | DataType::Integer)
46 }
47}
48
49impl<'q> Encode<'q, Sqlite> for i16 {
50 fn encode_by_ref(
51 &self,
52 args: &mut Vec<SqliteArgumentValue<'q>>,
53 ) -> Result<IsNull, BoxDynError> {
54 args.push(SqliteArgumentValue::Int(*self as i32));
55
56 Ok(IsNull::No)
57 }
58}
59
60impl<'r> Decode<'r, Sqlite> for i16 {
61 fn decode(value: SqliteValueRef<'r>) -> Result<Self, BoxDynError> {
62 Ok(value.int64().try_into()?)
63 }
64}
65
66impl Type<Sqlite> for i32 {
67 fn type_info() -> SqliteTypeInfo {
68 SqliteTypeInfo(DataType::Int4)
69 }
70
71 fn compatible(ty: &SqliteTypeInfo) -> bool {
72 matches!(ty.0, DataType::Int4 | DataType::Integer)
73 }
74}
75
76impl<'q> Encode<'q, Sqlite> for i32 {
77 fn encode_by_ref(
78 &self,
79 args: &mut Vec<SqliteArgumentValue<'q>>,
80 ) -> Result<IsNull, BoxDynError> {
81 args.push(SqliteArgumentValue::Int(*self));
82
83 Ok(IsNull::No)
84 }
85}
86
87impl<'r> Decode<'r, Sqlite> for i32 {
88 fn decode(value: SqliteValueRef<'r>) -> Result<Self, BoxDynError> {
89 Ok(value.int64().try_into()?)
90 }
91}
92
93impl Type<Sqlite> for i64 {
94 fn type_info() -> SqliteTypeInfo {
95 SqliteTypeInfo(DataType::Integer)
96 }
97
98 fn compatible(ty: &SqliteTypeInfo) -> bool {
99 matches!(ty.0, DataType::Int4 | DataType::Integer)
100 }
101}
102
103impl<'q> Encode<'q, Sqlite> for i64 {
104 fn encode_by_ref(
105 &self,
106 args: &mut Vec<SqliteArgumentValue<'q>>,
107 ) -> Result<IsNull, BoxDynError> {
108 args.push(SqliteArgumentValue::Int64(*self));
109
110 Ok(IsNull::No)
111 }
112}
113
114impl<'r> Decode<'r, Sqlite> for i64 {
115 fn decode(value: SqliteValueRef<'r>) -> Result<Self, BoxDynError> {
116 Ok(value.int64())
117 }
118}