1use displaydoc::Display;
8
9#[non_exhaustive]
10#[derive(PartialEq, Display, Clone, Copy, Debug)]
11pub enum ParseError {
13 #[displaydoc("Implementation error: this error must not throw.")]
14 ImplAssert,
15 #[displaydoc("Invalid float while parsing fraction part.")]
16 ParseFloat,
17 #[displaydoc("Parsing ended abruptly while parsing {location}")]
18 AbruptEnd { location: &'static str },
19 #[displaydoc("Unexpected character found after parsing was completed.")]
20 InvalidEnd,
21
22 #[displaydoc("Parsed month value not in a valid range.")]
24 InvalidMonthRange,
25 #[displaydoc("Parsed day value not in a valid range.")]
26 InvalidDayRange,
27 #[displaydoc("Invalid chracter while parsing year value.")]
28 DateYear,
29 #[displaydoc("Invalid character while parsing extended year value.")]
30 DateExtendedYear,
31 #[displaydoc("Invalid caracter while parsing month value.")]
32 DateMonth,
33 #[displaydoc("Invalid character while parsing day value.")]
34 DateDay,
35 #[displaydoc("Unexpected end while parsing a date value.")]
36 DateUnexpectedEnd,
37
38 #[displaydoc("Time is required.")]
40 TimeRequired,
41 #[displaydoc("Invalid character while parsing hour value.")]
42 TimeHour,
43 #[displaydoc("Invalid character while parsing minute/second value in (0, 59] range.")]
44 TimeMinuteSecond,
45 #[displaydoc("Invalid character while parsing second value in (0, 60] range.")]
46 TimeSecond,
47 #[displaydoc("Invalid character while parsing fraction part value.")]
48 FractionPart,
49 #[displaydoc("Invalid character while parsing date separator.")]
50 DateSeparator,
51 #[displaydoc("Invalid character while parsing time separator.")]
52 TimeSeparator,
53 #[displaydoc("Invalid character while parsing decimal separator.")]
54 DecimalSeparator,
55
56 #[displaydoc("Invalid annotation.")]
58 InvalidAnnotation,
59 #[displaydoc("Invalid annotation open character.")]
60 AnnotationOpen,
61 #[displaydoc("Invalid annotation close character.")]
62 AnnotationClose,
63 #[displaydoc("Invalid annotation character.")]
64 AnnotationChar,
65 #[displaydoc("Invalid annotation key-value separator character.")]
66 AnnotationKeyValueSeparator,
67 #[displaydoc("Invalid annotation key leading character.")]
68 AnnotationKeyLeadingChar,
69 #[displaydoc("Invalid annotation key character.")]
70 AnnotationKeyChar,
71 #[displaydoc("Expected annotation value character must exist after hyphen.")]
72 AnnotationValueCharPostHyphen,
73 #[displaydoc("Invalid annotation value character.")]
74 AnnotationValueChar,
75
76 #[displaydoc("Duplicate calendars cannot be provided when one is critical.")]
78 CriticalDuplicateCalendar,
79 #[displaydoc("Unrecognized annoation is marked as critical.")]
80 UnrecognizedCritical,
81
82 #[displaydoc("Invalid time zone leading character.")]
84 TzLeadingChar,
85 #[displaydoc("Expected time zone character after '/'.")]
86 IanaCharPostSeparator,
87 #[displaydoc("Invalid IANA time zone character after '/'.")]
88 IanaChar,
89 #[displaydoc("Invalid time zone character after '/'.")]
90 UtcTimeSeparator,
91
92 #[displaydoc("MonthDay must begin with a month or '--'")]
94 MonthDayHyphen,
95
96 #[displaydoc("Invalid duration designator.")]
98 DurationDisgnator,
99 #[displaydoc("Provided Duration field value exceeds supported range.")]
100 DurationValueExceededRange,
101 #[displaydoc("Invalid date duration part order.")]
102 DateDurationPartOrder,
103 #[displaydoc("Invalid time duration part order.")]
104 TimeDurationPartOrder,
105 #[displaydoc("Invalid time duration designator.")]
106 TimeDurationDesignator,
107}
108
109impl core::error::Error for ParseError {}
110
111impl ParseError {
112 pub(crate) fn abrupt_end(location: &'static str) -> Self {
113 ParseError::AbruptEnd { location }
114 }
115}