1- use std :: { str :: FromStr , time :: Duration , fmt } ;
2- use serde :: { Serialize , Serializer , Deserialize , Deserializer , de } ;
1+ use serde :: { de , Deserialize , Deserializer , Serialize , Serializer } ;
2+ use std :: { fmt , str :: FromStr , time :: Duration } ;
33
44#[ derive( Copy , Clone , PartialEq , Eq ) ]
55pub struct K8sDuration {
@@ -26,13 +26,13 @@ impl From<Duration> for K8sDuration {
2626 fn from ( duration : Duration ) -> Self {
2727 Self {
2828 duration,
29- is_negative : false
29+ is_negative : false ,
3030 }
3131 }
3232}
3333
3434impl From < K8sDuration > for Duration {
35- fn from ( K8sDuration { duration, .. } : K8sDuration ) -> Self {
35+ fn from ( K8sDuration { duration, .. } : K8sDuration ) -> Self {
3636 duration
3737 }
3838}
@@ -98,7 +98,8 @@ impl FromStr for K8sDuration {
9898 if let Some ( unit_start) = s. find ( |c : char | c. is_alphabetic ( ) ) {
9999 let ( val, rest) = s. split_at ( unit_start) ;
100100 let val = val. parse :: < f64 > ( ) ?;
101- let unit = if let Some ( next_numeric_start) = rest. find ( |c : char | !c. is_alphabetic ( ) ) {
101+ let unit = if let Some ( next_numeric_start) = rest. find ( |c : char | !c. is_alphabetic ( ) )
102+ {
102103 let ( unit, rest) = rest. split_at ( next_numeric_start) ;
103104 s = rest;
104105 unit
@@ -108,14 +109,19 @@ impl FromStr for K8sDuration {
108109 } ;
109110 total += duration_from_units ( val, unit) ?;
110111 } else if s == "0" {
111- return Ok ( K8sDuration { duration : Duration :: from_secs ( 0 ) , is_negative } ) ;
112+ return Ok ( K8sDuration {
113+ duration : Duration :: from_secs ( 0 ) ,
114+ is_negative,
115+ } ) ;
112116 } else {
113117 return Err ( ParseError :: NoUnit ) ;
114118 }
115119 }
116120
117- Ok ( K8sDuration { duration : total, is_negative } )
118-
121+ Ok ( K8sDuration {
122+ duration : total,
123+ is_negative,
124+ } )
119125 }
120126}
121127
@@ -131,7 +137,7 @@ impl Serialize for K8sDuration {
131137impl < ' de > Deserialize < ' de > for K8sDuration {
132138 fn deserialize < D > ( deserializer : D ) -> Result < Self , D :: Error >
133139 where
134- D : Deserializer < ' de >
140+ D : Deserializer < ' de > ,
135141 {
136142 struct Visitor ;
137143 impl < ' de > de:: Visitor < ' de > for Visitor {
@@ -141,7 +147,6 @@ impl<'de> Deserialize<'de> for K8sDuration {
141147 f. write_str ( "a string in Go `time.Duration.String()` format" )
142148 }
143149
144-
145150 fn visit_str < E > ( self , value : & str ) -> Result < Self :: Value , E >
146151 where
147152 E : de:: Error ,
@@ -204,18 +209,33 @@ mod tests {
204209 ( "1478s" , Duration :: from_secs ( 1478 ) . into ( ) ) ,
205210 // // sign
206211 // {"-5s", -5 * Second},
207- ( "-5s" , K8sDuration { duration : Duration :: from_secs ( 5 ) , is_negative : true } ) ,
212+ (
213+ "-5s" ,
214+ K8sDuration {
215+ duration : Duration :: from_secs ( 5 ) ,
216+ is_negative : true ,
217+ } ,
218+ ) ,
208219 // {"+5s", 5 * Second},
209220 ( "+5s" , Duration :: from_secs ( 5 ) . into ( ) ) ,
210221 // {"-0", 0},
211- ( "-0" , K8sDuration { duration : Duration :: from_secs ( 0 ) , is_negative : true } ) ,
222+ (
223+ "-0" ,
224+ K8sDuration {
225+ duration : Duration :: from_secs ( 0 ) ,
226+ is_negative : true ,
227+ } ,
228+ ) ,
212229 // {"+0", 0},
213230 ( "+0" , Duration :: from_secs ( 0 ) . into ( ) ) ,
214231 // // decimal
215232 // {"5.0s", 5 * Second},
216233 ( "5s" , Duration :: from_secs ( 5 ) . into ( ) ) ,
217234 // {"5.6s", 5*Second + 600*Millisecond},
218- ( "5.6s" , ( Duration :: from_secs ( 5 ) + Duration :: from_millis ( 600 ) ) . into ( ) ) ,
235+ (
236+ "5.6s" ,
237+ ( Duration :: from_secs ( 5 ) + Duration :: from_millis ( 600 ) ) . into ( ) ,
238+ ) ,
219239 // {"5.s", 5 * Second},
220240 ( "5.s" , Duration :: from_secs ( 5 ) . into ( ) ) ,
221241 // {".5s", 500 * Millisecond},
@@ -225,11 +245,20 @@ mod tests {
225245 // {"1.00s", 1 * Second},
226246 ( "1.00s" , Duration :: from_secs ( 1 ) . into ( ) ) ,
227247 // {"1.004s", 1*Second + 4*Millisecond},
228- ( "1.004s" , ( Duration :: from_secs ( 1 ) + Duration :: from_millis ( 4 ) ) . into ( ) ) ,
248+ (
249+ "1.004s" ,
250+ ( Duration :: from_secs ( 1 ) + Duration :: from_millis ( 4 ) ) . into ( ) ,
251+ ) ,
229252 // {"1.0040s", 1*Second + 4*Millisecond},
230- ( "1.0040s" , ( Duration :: from_secs ( 1 ) + Duration :: from_millis ( 4 ) ) . into ( ) ) ,
253+ (
254+ "1.0040s" ,
255+ ( Duration :: from_secs ( 1 ) + Duration :: from_millis ( 4 ) ) . into ( ) ,
256+ ) ,
231257 // {"100.00100s", 100*Second + 1*Millisecond},
232- ( "100.00100s" , ( Duration :: from_secs ( 100 ) + Duration :: from_millis ( 1 ) ) . into ( ) ) ,
258+ (
259+ "100.00100s" ,
260+ ( Duration :: from_secs ( 100 ) + Duration :: from_millis ( 1 ) ) . into ( ) ,
261+ ) ,
233262 // // different units
234263 // {"10ns", 10 * Nanosecond},
235264 ( "10ns" , Duration :: from_nanos ( 10 ) . into ( ) ) ,
@@ -251,18 +280,34 @@ mod tests {
251280 // {"3h30m", 3*Hour + 30*Minute},
252281 ( "3h30m" , ( 3 * HOUR + 30 * MINUTE ) . into ( ) ) ,
253282 // {"10.5s4m", 4*Minute + 10*Second + 500*Millisecond},
254- ( "10.5s4m" , ( 4 * MINUTE + Duration :: from_secs ( 10 ) + Duration :: from_millis ( 500 ) ) . into ( ) ) ,
283+ (
284+ "10.5s4m" ,
285+ ( 4 * MINUTE + Duration :: from_secs ( 10 ) + Duration :: from_millis ( 500 ) ) . into ( ) ,
286+ ) ,
255287 // {"-2m3.4s", -(2*Minute + 3*Second + 400*Millisecond)},
256- ( "-2m3.4s" , K8sDuration { duration : 2 * MINUTE + Duration :: from_secs ( 3 ) + Duration :: from_millis ( 400 ) , is_negative : true } ) ,
288+ (
289+ "-2m3.4s" ,
290+ K8sDuration {
291+ duration : 2 * MINUTE + Duration :: from_secs ( 3 ) + Duration :: from_millis ( 400 ) ,
292+ is_negative : true ,
293+ } ,
294+ ) ,
257295 // {"1h2m3s4ms5us6ns", 1*Hour + 2*Minute + 3*Second + 4*Millisecond + 5*Microsecond + 6*Nanosecond},
258296 (
259297 "1h2m3s4ms5us6ns" ,
260- ( 1 * HOUR + 2 * MINUTE + Duration :: from_secs ( 3 ) + Duration :: from_millis ( 4 )
261- + Duration :: from_micros ( 5 ) + Duration :: from_nanos ( 6 ) ) . into ( ) ) ,
298+ ( 1 * HOUR
299+ + 2 * MINUTE
300+ + Duration :: from_secs ( 3 )
301+ + Duration :: from_millis ( 4 )
302+ + Duration :: from_micros ( 5 )
303+ + Duration :: from_nanos ( 6 ) )
304+ . into ( ) ,
305+ ) ,
262306 // {"39h9m14.425s", 39*Hour + 9*Minute + 14*Second + 425*Millisecond},
263307 (
264308 "39h9m14.425s" ,
265- ( 39 * HOUR + 9 * MINUTE + Duration :: from_secs ( 14 ) + Duration :: from_millis ( 425 ) ) . into ( ) ,
309+ ( 39 * HOUR + 9 * MINUTE + Duration :: from_secs ( 14 ) + Duration :: from_millis ( 425 ) )
310+ . into ( ) ,
266311 ) ,
267312 // // large value
268313 // {"52763797000ns", 52763797000 * Nanosecond},
@@ -272,7 +317,10 @@ mod tests {
272317 ( "0.3333333333333333333h" , ( 20 * MINUTE ) . into ( ) ) ,
273318 // // 9007199254740993 = 1<<53+1 cannot be stored precisely in a float64
274319 // {"9007199254740993ns", (1<<53 + 1) * Nanosecond},
275- ( "9007199254740993ns" , Duration :: from_nanos ( ( 1 << 53 ) + 1 ) . into ( ) ) ,
320+ (
321+ "9007199254740993ns" ,
322+ Duration :: from_nanos ( ( 1 << 53 ) + 1 ) . into ( ) ,
323+ ) ,
276324 // Rust Durations can handle larger durations than Go's
277325 // representation, so skip these tests for their precision limits
278326
@@ -292,11 +340,10 @@ mod tests {
292340
293341 // // huge string; issue 15011.
294342 // {"0.100000000000000000000h", 6 * Minute},
295- ( "0.100000000000000000000h" , ( 6 * MINUTE ) . into ( ) )
296- // // This value tests the first overflow check in leadingFraction.
297- // {"0.830103483285477580700h", 49*Minute + 48*Second + 372539827*Nanosecond},
298- // }
299- // ```
343+ ( "0.100000000000000000000h" , ( 6 * MINUTE ) . into ( ) ) , // // This value tests the first overflow check in leadingFraction.
344+ // {"0.830103483285477580700h", 49*Minute + 48*Second + 372539827*Nanosecond},
345+ // }
346+ // ```
300347 ] ;
301348
302349 for ( input, expected) in cases {
0 commit comments