@@ -20,6 +20,7 @@ use std::num::{ParseFloatError, ParseIntError};
2020use std:: result;
2121use std:: str:: FromStr ;
2222use std:: string:: ParseError as StringParseError ;
23+ use std:: time:: TryFromFloatSecsError ;
2324
2425// Server errors {{{
2526/// Server error codes, as defined in [libmpdclient](https://www.musicpd.org/doc/libmpdclient/protocol_8h_source.html)
@@ -219,6 +220,11 @@ impl From<ParseFloatError> for Error {
219220 Error :: Parse ( ParseError :: BadFloat ( e) )
220221 }
221222}
223+ impl From < TryFromFloatSecsError > for Error {
224+ fn from ( e : TryFromFloatSecsError ) -> Error {
225+ Error :: Parse ( ParseError :: BadDuration ( e) )
226+ }
227+ }
222228impl From < ServerError > for Error {
223229 fn from ( e : ServerError ) -> Error {
224230 Error :: Server ( e)
@@ -235,6 +241,8 @@ pub enum ParseError {
235241 BadInteger ( ParseIntError ) ,
236242 /// invalid float
237243 BadFloat ( ParseFloatError ) ,
244+ /// invalid duration (negative, too big or not a number)
245+ BadDuration ( TryFromFloatSecsError ) ,
238246 /// some other invalid value
239247 BadValue ( String ) ,
240248 /// invalid version format (should be x.y.z)
@@ -281,6 +289,7 @@ impl fmt::Display for ParseError {
281289 let desc = match * self {
282290 E :: BadInteger ( _) => "invalid integer" ,
283291 E :: BadFloat ( _) => "invalid float" ,
292+ E :: BadDuration ( _) => "invalid duration" ,
284293 E :: BadValue ( _) => "invalid value" ,
285294 E :: BadVersion => "invalid version" ,
286295 E :: NotAck => "not an ACK" ,
@@ -315,6 +324,12 @@ impl From<ParseFloatError> for ParseError {
315324 }
316325}
317326
327+ impl From < TryFromFloatSecsError > for ParseError {
328+ fn from ( e : TryFromFloatSecsError ) -> ParseError {
329+ ParseError :: BadDuration ( e)
330+ }
331+ }
332+
318333impl From < StringParseError > for ParseError {
319334 fn from ( e : StringParseError ) -> ParseError {
320335 match e { }
0 commit comments