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