1#![warn(missing_docs)]
2
3use std::error::Error;
6use std::fmt;
7
8pub mod bytes;
9pub mod duration;
10pub mod num;
11pub mod time;
12
13#[derive(Debug, Copy, Clone, Eq, PartialEq)]
15pub enum ParseError {
16 EmptyInput,
18
19 MissingValue,
21
22 InvalidValue,
24
25 MissingUnit,
27
28 InvalidUnit,
30
31 DuplicateUnit,
33
34 Overflow,
36
37 TooShort,
39
40 TooLong,
42
43 Malformed,
45
46 InvalidTimezone,
48}
49
50impl ParseError {
51 fn description(&self) -> &str {
52 match self {
53 ParseError::EmptyInput => "empty input",
54 ParseError::MissingValue => "missing value",
55 ParseError::InvalidValue => "invalid value",
56 ParseError::MissingUnit => "missing unit",
57 ParseError::InvalidUnit => "invalid unit",
58 ParseError::DuplicateUnit => "duplicate unit",
59 ParseError::Overflow => "value overflow",
60 ParseError::TooShort => "too short",
61 ParseError::TooLong => "too long",
62 ParseError::Malformed => "malformed",
63 ParseError::InvalidTimezone => "invalid timezone",
64 }
65 }
66}
67
68impl fmt::Display for ParseError {
69 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
70 f.pad(self.description())
71 }
72}
73
74impl Error for ParseError {}