1use core::error::Error;
4use core::fmt;
5
6#[non_exhaustive]
8#[derive(Debug)]
9pub enum LocalTimeTypeError {
10 InvalidTimeZoneDesignationLength,
12 InvalidTimeZoneDesignationChar,
14 InvalidUtcOffset,
16}
17
18impl fmt::Display for LocalTimeTypeError {
19 fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
20 match self {
21 Self::InvalidTimeZoneDesignationLength => f.write_str("time zone designation must have between 3 and 7 characters"),
22 Self::InvalidTimeZoneDesignationChar => f.write_str("invalid characters in time zone designation"),
23 Self::InvalidUtcOffset => f.write_str("invalid UTC offset"),
24 }
25 }
26}
27
28impl Error for LocalTimeTypeError {}
29
30#[non_exhaustive]
32#[derive(Debug)]
33pub enum TransitionRuleError {
34 InvalidRuleDayJulianDay,
36 InvalidRuleDayMonth,
38 InvalidRuleDayWeek,
40 InvalidRuleDayWeekDay,
42 InvalidStdUtcOffset,
44 InvalidDstUtcOffset,
46 InvalidDstStartEndTime,
48 InconsistentRule,
50}
51
52impl fmt::Display for TransitionRuleError {
53 fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
54 match self {
55 Self::InvalidRuleDayJulianDay => f.write_str("invalid rule day julian day"),
56 Self::InvalidRuleDayMonth => f.write_str("invalid rule day month"),
57 Self::InvalidRuleDayWeek => f.write_str("invalid rule day week"),
58 Self::InvalidRuleDayWeekDay => f.write_str("invalid rule day week day"),
59 Self::InvalidStdUtcOffset => f.write_str("invalid standard time UTC offset"),
60 Self::InvalidDstUtcOffset => f.write_str("invalid Daylight Saving Time UTC offset"),
61 Self::InvalidDstStartEndTime => f.write_str("invalid DST start or end time"),
62 Self::InconsistentRule => f.write_str("DST transition rules are not consistent from one year to another"),
63 }
64 }
65}
66
67impl Error for TransitionRuleError {}
68
69#[non_exhaustive]
71#[derive(Debug)]
72pub enum TimeZoneError {
73 NoLocalTimeType,
75 InvalidLocalTimeTypeIndex,
77 InvalidTransition,
79 InvalidLeapSecond,
81 InconsistentExtraRule,
83}
84
85impl fmt::Display for TimeZoneError {
86 fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
87 match self {
88 Self::NoLocalTimeType => f.write_str("list of local time types must not be empty"),
89 Self::InvalidLocalTimeTypeIndex => f.write_str("invalid local time type index"),
90 Self::InvalidTransition => f.write_str("invalid transition"),
91 Self::InvalidLeapSecond => f.write_str("invalid leap second"),
92 Self::InconsistentExtraRule => f.write_str("extra transition rule is inconsistent with the last transition"),
93 }
94 }
95}
96
97impl Error for TimeZoneError {}