1- use chrono:: { DateTime , Duration , TimeZone , Utc } ;
1+ use chrono:: { DateTime , TimeDelta , TimeZone , Utc } ;
22use serde:: ser:: Serializer ;
33use serde:: {
44 de:: { Deserializer , Error as DeError } ,
@@ -55,11 +55,11 @@ impl DerefMut for SecondTimestamp {
5555pub struct SecondDuration (
5656 #[ serde( deserialize_with = "deserialize_duration_seconds" ) ]
5757 #[ serde( serialize_with = "serialize_duration_seconds" ) ]
58- pub Duration ,
58+ pub TimeDelta ,
5959) ;
6060
6161impl Deref for SecondDuration {
62- type Target = Duration ;
62+ type Target = TimeDelta ;
6363
6464 fn deref ( & self ) -> & Self :: Target {
6565 & self . 0
@@ -77,11 +77,11 @@ impl DerefMut for SecondDuration {
7777pub struct MinuteDuration (
7878 #[ serde( deserialize_with = "deserialize_duration_minutes" ) ]
7979 #[ serde( serialize_with = "serialize_duration_minutes" ) ]
80- pub Duration ,
80+ pub TimeDelta ,
8181) ;
8282
8383impl Deref for MinuteDuration {
84- type Target = Duration ;
84+ type Target = TimeDelta ;
8585
8686 fn deref ( & self ) -> & Self :: Target {
8787 & self . 0
@@ -144,7 +144,7 @@ where
144144 . ok_or_else ( || D :: Error :: custom ( "invalid timestamp" ) )
145145}
146146
147- fn serialize_duration_seconds < S > ( duration : & Duration , serializer : S ) -> Result < S :: Ok , S :: Error >
147+ fn serialize_duration_seconds < S > ( duration : & TimeDelta , serializer : S ) -> Result < S :: Ok , S :: Error >
148148where
149149 S : Serializer ,
150150{
@@ -153,15 +153,16 @@ where
153153 serializer. serialize_i64 ( seconds)
154154}
155155
156- fn deserialize_duration_seconds < ' de , D > ( deserializer : D ) -> Result < Duration , D :: Error >
156+ fn deserialize_duration_seconds < ' de , D > ( deserializer : D ) -> Result < TimeDelta , D :: Error >
157157where
158158 D : Deserializer < ' de > ,
159159{
160160 let seconds = f64:: deserialize ( deserializer) ?;
161- Ok ( Duration :: seconds ( seconds as i64 ) )
161+ TimeDelta :: try_seconds ( seconds as i64 )
162+ . ok_or_else ( || D :: Error :: custom ( format ! ( "invalid time delta seconds `{}`" , seconds) ) )
162163}
163164
164- fn serialize_duration_minutes < S > ( duration : & Duration , serializer : S ) -> Result < S :: Ok , S :: Error >
165+ fn serialize_duration_minutes < S > ( duration : & TimeDelta , serializer : S ) -> Result < S :: Ok , S :: Error >
165166where
166167 S : Serializer ,
167168{
@@ -170,12 +171,13 @@ where
170171 serializer. serialize_i64 ( minutes)
171172}
172173
173- fn deserialize_duration_minutes < ' de , D > ( deserializer : D ) -> Result < Duration , D :: Error >
174+ fn deserialize_duration_minutes < ' de , D > ( deserializer : D ) -> Result < TimeDelta , D :: Error >
174175where
175176 D : Deserializer < ' de > ,
176177{
177178 let minutes = f64:: deserialize ( deserializer) ?;
178- Ok ( Duration :: minutes ( minutes as i64 ) )
179+ TimeDelta :: try_minutes ( minutes as i64 )
180+ . ok_or_else ( || D :: Error :: custom ( format ! ( "invalid time delta minutes `{}`" , minutes) ) )
179181}
180182
181183fn normalize_timestamp < ' de , D > ( deserializer : D ) -> Result < ( u64 , u64 ) , D :: Error >
@@ -291,10 +293,10 @@ mod test {
291293 #[ derive( Deserialize ) ]
292294 struct Test {
293295 #[ serde( deserialize_with = "deserialize_duration_seconds" ) ]
294- v : Duration ,
296+ v : TimeDelta ,
295297 }
296298
297- let expected = Duration :: seconds ( 36 ) ;
299+ let expected = TimeDelta :: try_seconds ( 36 ) . unwrap ( ) ;
298300
299301 let data = serde_json:: json!( {
300302 "v" : 36 ,
@@ -314,10 +316,10 @@ mod test {
314316 #[ derive( Serialize ) ]
315317 struct Test {
316318 #[ serde( serialize_with = "serialize_duration_seconds" ) ]
317- v : Duration ,
319+ v : TimeDelta ,
318320 }
319321 let instance = Test {
320- v : Duration :: seconds ( 36 ) ,
322+ v : TimeDelta :: try_seconds ( 36 ) . unwrap ( ) ,
321323 } ;
322324 let encoded = serde_json:: to_string ( & instance) . unwrap ( ) ;
323325 assert_eq ! ( encoded, String :: from( r#"{"v":36}"# ) ) ;
@@ -328,10 +330,10 @@ mod test {
328330 #[ derive( Deserialize ) ]
329331 struct Test {
330332 #[ serde( deserialize_with = "deserialize_duration_minutes" ) ]
331- v : Duration ,
333+ v : TimeDelta ,
332334 }
333335
334- let expected = Duration :: minutes ( 36 ) ;
336+ let expected = TimeDelta :: try_minutes ( 36 ) . unwrap ( ) ;
335337
336338 let data = serde_json:: json!( {
337339 "v" : 36 ,
@@ -351,10 +353,10 @@ mod test {
351353 #[ derive( Serialize ) ]
352354 struct Test {
353355 #[ serde( serialize_with = "serialize_duration_minutes" ) ]
354- v : Duration ,
356+ v : TimeDelta ,
355357 }
356358 let instance = Test {
357- v : Duration :: minutes ( 36 ) ,
359+ v : TimeDelta :: try_minutes ( 36 ) . unwrap ( ) ,
358360 } ;
359361 let encoded = serde_json:: to_string ( & instance) . unwrap ( ) ;
360362 assert_eq ! ( encoded, String :: from( r#"{"v":36}"# ) ) ;
0 commit comments