Skip to content

Commit ae3b024

Browse files
committed
add more types
1 parent 19548d1 commit ae3b024

File tree

6 files changed

+216
-17
lines changed

6 files changed

+216
-17
lines changed

sqlx-core/src/aurora/types/bool.rs

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
use crate::aurora::type_info::AuroraType;
2+
use crate::aurora::{Aurora, AuroraTypeInfo, AuroraValueRef};
3+
use crate::decode::Decode;
4+
use crate::encode::{Encode, IsNull};
5+
use crate::error::{BoxDynError, Error};
6+
use crate::types::Type;
7+
8+
use rusoto_rds_data::{Field, SqlParameter};
9+
10+
impl Type<Aurora> for bool {
11+
fn type_info() -> AuroraTypeInfo {
12+
AuroraTypeInfo(AuroraType::Boolean)
13+
}
14+
}
15+
16+
impl Type<Aurora> for [bool] {
17+
fn type_info() -> AuroraTypeInfo {
18+
AuroraTypeInfo(AuroraType::Boolean)
19+
}
20+
}
21+
22+
impl Type<Aurora> for Vec<bool> {
23+
fn type_info() -> AuroraTypeInfo {
24+
<[bool] as Type<Aurora>>::type_info()
25+
}
26+
}
27+
28+
impl Encode<'_, Aurora> for bool {
29+
fn encode_by_ref(&self, buf: &mut Vec<SqlParameter>) -> IsNull {
30+
buf.push(SqlParameter {
31+
value: Some(Field {
32+
boolean_value: Some(*self),
33+
..Default::default()
34+
}),
35+
..Default::default()
36+
});
37+
38+
IsNull::No
39+
}
40+
}
41+
42+
impl Decode<'_, Aurora> for bool {
43+
fn decode(value: AuroraValueRef<'_>) -> Result<Self, BoxDynError> {
44+
Ok(value
45+
.field
46+
.boolean_value
47+
.ok_or_else(|| Error::Decode("Not a bool value".into()))?)
48+
}
49+
}

sqlx-core/src/aurora/types/bytes.rs

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
use crate::aurora::type_info::AuroraType;
2+
use crate::aurora::{Aurora, AuroraTypeInfo, AuroraValueRef};
3+
use crate::decode::Decode;
4+
use crate::encode::{Encode, IsNull};
5+
use crate::error::{BoxDynError, Error};
6+
use crate::types::Type;
7+
8+
use bytes::Bytes;
9+
use rusoto_rds_data::{Field, SqlParameter};
10+
11+
impl Type<Aurora> for [u8] {
12+
fn type_info() -> AuroraTypeInfo {
13+
AuroraTypeInfo(AuroraType::Blob)
14+
}
15+
}
16+
17+
impl Type<Aurora> for Vec<u8> {
18+
fn type_info() -> AuroraTypeInfo {
19+
<[u8] as Type<Aurora>>::type_info()
20+
}
21+
}
22+
23+
impl Encode<'_, Aurora> for &'_ [u8] {
24+
fn encode_by_ref(&self, buf: &mut Vec<SqlParameter>) -> IsNull {
25+
buf.push(SqlParameter {
26+
value: Some(Field {
27+
blob_value: Some(Bytes::from(self.to_vec())),
28+
..Default::default()
29+
}),
30+
..Default::default()
31+
});
32+
33+
IsNull::No
34+
}
35+
}
36+
37+
impl Encode<'_, Aurora> for Vec<u8> {
38+
fn encode_by_ref(&self, buf: &mut Vec<SqlParameter>) -> IsNull {
39+
<&[u8] as Encode<Aurora>>::encode(self, buf)
40+
}
41+
}
42+
43+
impl<'r> Decode<'r, Aurora> for &'r [u8] {
44+
fn decode(value: AuroraValueRef<'r>) -> Result<Self, BoxDynError> {
45+
Ok(value
46+
.field
47+
.blob_value
48+
.as_ref()
49+
.ok_or_else(|| Error::Decode("Not a blob value".into()))?)
50+
}
51+
}
52+
53+
impl Decode<'_, Aurora> for Vec<u8> {
54+
fn decode(value: AuroraValueRef<'_>) -> Result<Self, BoxDynError> {
55+
<&[u8] as Decode<Aurora>>::decode(value).map(|v| v.to_vec())
56+
}
57+
}

sqlx-core/src/aurora/types/float.rs

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
use crate::aurora::type_info::AuroraType;
2+
use crate::aurora::{Aurora, AuroraTypeInfo, AuroraValueRef};
3+
use crate::decode::Decode;
4+
use crate::encode::{Encode, IsNull};
5+
use crate::error::{BoxDynError, Error};
6+
use crate::types::Type;
7+
8+
use rusoto_rds_data::{Field, SqlParameter};
9+
10+
impl Type<Aurora> for f64 {
11+
fn type_info() -> AuroraTypeInfo {
12+
AuroraTypeInfo(AuroraType::Double)
13+
}
14+
}
15+
16+
impl Type<Aurora> for [f64] {
17+
fn type_info() -> AuroraTypeInfo {
18+
AuroraTypeInfo(AuroraType::DoubleArray)
19+
}
20+
}
21+
22+
impl Type<Aurora> for Vec<f64> {
23+
fn type_info() -> AuroraTypeInfo {
24+
<[f64] as Type<Aurora>>::type_info()
25+
}
26+
}
27+
28+
impl Encode<'_, Aurora> for f64 {
29+
fn encode_by_ref(&self, buf: &mut Vec<SqlParameter>) -> IsNull {
30+
buf.push(SqlParameter {
31+
value: Some(Field {
32+
double_value: Some(*self),
33+
..Default::default()
34+
}),
35+
..Default::default()
36+
});
37+
38+
IsNull::No
39+
}
40+
}
41+
42+
impl Decode<'_, Aurora> for f64 {
43+
fn decode(value: AuroraValueRef<'_>) -> Result<Self, BoxDynError> {
44+
Ok(value
45+
.field
46+
.double_value
47+
.ok_or_else(|| Error::Decode("Not a double value".into()))?)
48+
}
49+
}

sqlx-core/src/aurora/types/int.rs

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
use crate::aurora::type_info::AuroraType;
2+
use crate::aurora::{Aurora, AuroraTypeInfo, AuroraValueRef};
3+
use crate::decode::Decode;
4+
use crate::encode::{Encode, IsNull};
5+
use crate::error::{BoxDynError, Error};
6+
use crate::types::Type;
7+
8+
use rusoto_rds_data::{Field, SqlParameter};
9+
10+
impl Type<Aurora> for i64 {
11+
fn type_info() -> AuroraTypeInfo {
12+
AuroraTypeInfo(AuroraType::Long)
13+
}
14+
}
15+
16+
impl Type<Aurora> for [i64] {
17+
fn type_info() -> AuroraTypeInfo {
18+
AuroraTypeInfo(AuroraType::LongArray)
19+
}
20+
}
21+
22+
impl Type<Aurora> for Vec<i64> {
23+
fn type_info() -> AuroraTypeInfo {
24+
<[i64] as Type<Aurora>>::type_info()
25+
}
26+
}
27+
28+
impl Encode<'_, Aurora> for i64 {
29+
fn encode_by_ref(&self, buf: &mut Vec<SqlParameter>) -> IsNull {
30+
buf.push(SqlParameter {
31+
value: Some(Field {
32+
long_value: Some(*self),
33+
..Default::default()
34+
}),
35+
..Default::default()
36+
});
37+
38+
IsNull::No
39+
}
40+
}
41+
42+
impl Decode<'_, Aurora> for i64 {
43+
fn decode(value: AuroraValueRef<'_>) -> Result<Self, BoxDynError> {
44+
Ok(value
45+
.field
46+
.long_value
47+
.ok_or_else(|| Error::Decode("Not a double value".into()))?)
48+
}
49+
}

sqlx-core/src/aurora/types/mod.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,5 @@
1+
mod bool;
2+
mod bytes;
3+
mod float;
4+
mod int;
15
mod str;

sqlx-core/src/aurora/types/str.rs

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1+
use crate::aurora::type_info::AuroraType;
2+
use crate::aurora::{Aurora, AuroraTypeInfo, AuroraValueRef};
13
use crate::decode::Decode;
24
use crate::encode::{Encode, IsNull};
35
use crate::error::{BoxDynError, Error};
4-
//use crate::aurora::types::array_compatible;
5-
use crate::aurora::type_info::AuroraType;
6-
use crate::aurora::{Aurora, AuroraTypeInfo, AuroraValueRef};
76
use crate::types::Type;
87

98
use rusoto_rds_data::{Field, SqlParameter};
@@ -12,20 +11,12 @@ impl Type<Aurora> for str {
1211
fn type_info() -> AuroraTypeInfo {
1312
AuroraTypeInfo(AuroraType::String)
1413
}
15-
16-
fn compatible(ty: &AuroraTypeInfo) -> bool {
17-
[AuroraTypeInfo(AuroraType::String)].contains(ty)
18-
}
1914
}
2015

2116
impl Type<Aurora> for [&'_ str] {
2217
fn type_info() -> AuroraTypeInfo {
2318
AuroraTypeInfo(AuroraType::StringArray)
2419
}
25-
26-
fn compatible(ty: &AuroraTypeInfo) -> bool {
27-
[AuroraTypeInfo(AuroraType::StringArray)].contains(ty)
28-
}
2920
}
3021

3122
impl Type<Aurora> for Vec<&'_ str> {
@@ -52,12 +43,6 @@ impl Encode<'_, Aurora> for &'_ str {
5243
}
5344
}
5445

55-
impl Encode<'_, Aurora> for String {
56-
fn encode_by_ref(&self, buf: &mut Vec<SqlParameter>) -> IsNull {
57-
<&str as Encode<Aurora>>::encode(&**self, buf)
58-
}
59-
}
60-
6146
impl<'r> Decode<'r, Aurora> for &'r str {
6247
fn decode(value: AuroraValueRef<'r>) -> Result<Self, BoxDynError> {
6348
Ok(value
@@ -98,6 +83,12 @@ impl Type<Aurora> for Vec<String> {
9883
}
9984
}
10085

86+
impl Encode<'_, Aurora> for String {
87+
fn encode_by_ref(&self, buf: &mut Vec<SqlParameter>) -> IsNull {
88+
<&str as Encode<Aurora>>::encode(&**self, buf)
89+
}
90+
}
91+
10192
impl Decode<'_, Aurora> for String {
10293
fn decode(value: AuroraValueRef<'_>) -> Result<Self, BoxDynError> {
10394
Ok(value

0 commit comments

Comments
 (0)