@@ -10,6 +10,24 @@ struct Test {
10
10
dt : OffsetDateTime ,
11
11
}
12
12
13
+ #[ derive( Serialize , Deserialize , Debug , PartialEq ) ]
14
+ struct TestMilliseconds {
15
+ #[ serde( with = "timestamp::milliseconds" ) ]
16
+ dt : OffsetDateTime ,
17
+ }
18
+
19
+ #[ derive( Serialize , Deserialize , Debug , PartialEq ) ]
20
+ struct TestMicroseconds {
21
+ #[ serde( with = "timestamp::microseconds" ) ]
22
+ dt : OffsetDateTime ,
23
+ }
24
+
25
+ #[ derive( Serialize , Deserialize , Debug , PartialEq ) ]
26
+ struct TestNanoseconds {
27
+ #[ serde( with = "timestamp::nanoseconds" ) ]
28
+ dt : OffsetDateTime ,
29
+ }
30
+
13
31
#[ test]
14
32
fn serialize_timestamp ( ) {
15
33
let value = Test {
@@ -40,3 +58,78 @@ fn serialize_timestamp() {
40
58
"invalid type: string \" bad\" , expected i64" ,
41
59
) ;
42
60
}
61
+
62
+ #[ test]
63
+ fn serialize_timestamp_milliseconds ( ) {
64
+ let value_milliseconds = TestMilliseconds {
65
+ dt : datetime ! ( 2000 -01 -01 00 : 00 : 00.999 UTC ) ,
66
+ } ;
67
+ assert_de_tokens_error :: < TestMilliseconds > (
68
+ & [
69
+ Token :: Struct {
70
+ name : "TestMilliseconds" ,
71
+ len : 1 ,
72
+ } ,
73
+ Token :: Str ( "dt" ) ,
74
+ Token :: Str ( "bad" ) ,
75
+ Token :: StructEnd ,
76
+ ] ,
77
+ "invalid type: string \" bad\" , expected i128" ,
78
+ ) ;
79
+ // serde_test does not support I128, see: https://github.com/serde-rs/test/issues/18
80
+ let milliseconds_str = r#"{"dt":946684800999}"# ;
81
+ let deserialized_milliseconds: TestMilliseconds = serde_json:: from_str ( milliseconds_str) . unwrap ( ) ;
82
+ let serialized_milliseconds = serde_json:: to_string ( & value_milliseconds) . unwrap ( ) ;
83
+ assert_eq ! ( value_milliseconds. dt, deserialized_milliseconds. dt) ;
84
+ assert_eq ! ( serialized_milliseconds, milliseconds_str) ;
85
+ }
86
+
87
+ #[ test]
88
+ fn serialize_timestamp_microseconds ( ) {
89
+ let value_microseconds = TestMicroseconds {
90
+ dt : datetime ! ( 2000 -01 -01 00 : 00 : 00.999_999 UTC ) ,
91
+ } ;
92
+ assert_de_tokens_error :: < TestMicroseconds > (
93
+ & [
94
+ Token :: Struct {
95
+ name : "TestMicroseconds" ,
96
+ len : 1 ,
97
+ } ,
98
+ Token :: Str ( "dt" ) ,
99
+ Token :: Str ( "bad" ) ,
100
+ Token :: StructEnd ,
101
+ ] ,
102
+ "invalid type: string \" bad\" , expected i128" ,
103
+ ) ;
104
+ // serde_test does not support I128, see: https://github.com/serde-rs/test/issues/18
105
+ let microseconds_str = r#"{"dt":946684800999999}"# ;
106
+ let deserialized_microseconds: TestMicroseconds = serde_json:: from_str ( microseconds_str) . unwrap ( ) ;
107
+ let serialized_microseconds = serde_json:: to_string ( & value_microseconds) . unwrap ( ) ;
108
+ assert_eq ! ( value_microseconds. dt, deserialized_microseconds. dt) ;
109
+ assert_eq ! ( serialized_microseconds, microseconds_str) ;
110
+ }
111
+
112
+ #[ test]
113
+ fn serialize_timestamp_nanoseconds ( ) {
114
+ let value_nanoseconds = TestNanoseconds {
115
+ dt : datetime ! ( 2000 -01 -01 00 : 00 : 00.999_999_999 UTC ) ,
116
+ } ;
117
+ assert_de_tokens_error :: < TestNanoseconds > (
118
+ & [
119
+ Token :: Struct {
120
+ name : "TestNanoseconds" ,
121
+ len : 1 ,
122
+ } ,
123
+ Token :: Str ( "dt" ) ,
124
+ Token :: Str ( "bad" ) ,
125
+ Token :: StructEnd ,
126
+ ] ,
127
+ "invalid type: string \" bad\" , expected i128" ,
128
+ ) ;
129
+ // serde_test does not support I128, see: https://github.com/serde-rs/test/issues/18
130
+ let nanoseconds_str = r#"{"dt":946684800999999999}"# ;
131
+ let deserialized_nanoseconds: TestNanoseconds = serde_json:: from_str ( nanoseconds_str) . unwrap ( ) ;
132
+ let serialized_nanoseconds = serde_json:: to_string ( & value_nanoseconds) . unwrap ( ) ;
133
+ assert_eq ! ( value_nanoseconds. dt, deserialized_nanoseconds. dt) ;
134
+ assert_eq ! ( serialized_nanoseconds, nanoseconds_str) ;
135
+ }
0 commit comments