1
1
use std:: convert:: TryFrom ;
2
2
3
3
use bytes:: Buf ;
4
- use chrono:: { DateTime , Datelike , NaiveDate , NaiveDateTime , NaiveTime , Timelike , Utc } ;
4
+ use chrono:: { DateTime , Datelike , Local , NaiveDate , NaiveDateTime , NaiveTime , Timelike , Utc } ;
5
5
6
6
use crate :: decode:: Decode ;
7
7
use crate :: encode:: { Encode , IsNull } ;
@@ -21,12 +21,14 @@ impl Type<MySql> for DateTime<Utc> {
21
21
}
22
22
}
23
23
24
+ /// Note: assumes the connection's `time_zone` is set to `+00:00` (UTC).
24
25
impl Encode < ' _ , MySql > for DateTime < Utc > {
25
26
fn encode_by_ref ( & self , buf : & mut Vec < u8 > ) -> IsNull {
26
27
Encode :: < MySql > :: encode ( & self . naive_utc ( ) , buf)
27
28
}
28
29
}
29
30
31
+ /// Note: assumes the connection's `time_zone` is set to `+00:00` (UTC).
30
32
impl < ' r > Decode < ' r , MySql > for DateTime < Utc > {
31
33
fn decode ( value : MySqlValueRef < ' r > ) -> Result < Self , BoxDynError > {
32
34
let naive: NaiveDateTime = Decode :: < MySql > :: decode ( value) ?;
@@ -35,6 +37,30 @@ impl<'r> Decode<'r, MySql> for DateTime<Utc> {
35
37
}
36
38
}
37
39
40
+ impl Type < MySql > for DateTime < Local > {
41
+ fn type_info ( ) -> MySqlTypeInfo {
42
+ MySqlTypeInfo :: binary ( ColumnType :: Timestamp )
43
+ }
44
+
45
+ fn compatible ( ty : & MySqlTypeInfo ) -> bool {
46
+ matches ! ( ty. r#type, ColumnType :: Datetime | ColumnType :: Timestamp )
47
+ }
48
+ }
49
+
50
+ /// Note: assumes the connection's `time_zone` is set to `+00:00` (UTC).
51
+ impl Encode < ' _ , MySql > for DateTime < Local > {
52
+ fn encode_by_ref ( & self , buf : & mut Vec < u8 > ) -> IsNull {
53
+ Encode :: < MySql > :: encode ( & self . naive_utc ( ) , buf)
54
+ }
55
+ }
56
+
57
+ /// Note: assumes the connection's `time_zone` is set to `+00:00` (UTC).
58
+ impl < ' r > Decode < ' r , MySql > for DateTime < Local > {
59
+ fn decode ( value : MySqlValueRef < ' r > ) -> Result < Self , BoxDynError > {
60
+ Ok ( <DateTime < Utc > as Decode < ' r , MySql > >:: decode ( value) ?. with_timezone ( & Local ) )
61
+ }
62
+ }
63
+
38
64
impl Type < MySql > for NaiveTime {
39
65
fn type_info ( ) -> MySqlTypeInfo {
40
66
MySqlTypeInfo :: binary ( ColumnType :: Time )
0 commit comments