tz/error/
timezone.rs

1//! Time zone error types.
2
3use core::error::Error;
4use core::fmt;
5
6/// Local time type error
7#[non_exhaustive]
8#[derive(Debug)]
9pub enum LocalTimeTypeError {
10    /// Invalid time zone designation length
11    InvalidTimeZoneDesignationLength,
12    /// Invalid characters in time zone designation
13    InvalidTimeZoneDesignationChar,
14    /// Invalid UTC offset
15    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/// Transition rule error
31#[non_exhaustive]
32#[derive(Debug)]
33pub enum TransitionRuleError {
34    /// Invalid rule day julian day
35    InvalidRuleDayJulianDay,
36    /// Invalid rule day month
37    InvalidRuleDayMonth,
38    /// Invalid rule day week
39    InvalidRuleDayWeek,
40    /// Invalid rule day week day
41    InvalidRuleDayWeekDay,
42    /// Invalid standard time UTC offset
43    InvalidStdUtcOffset,
44    /// Invalid Daylight Saving Time UTC offset
45    InvalidDstUtcOffset,
46    /// Invalid DST start or end time
47    InvalidDstStartEndTime,
48    /// Inconsistent DST transition rules from one year to another
49    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/// Time zone error
70#[non_exhaustive]
71#[derive(Debug)]
72pub enum TimeZoneError {
73    /// No local time type
74    NoLocalTimeType,
75    /// Invalid local time type index
76    InvalidLocalTimeTypeIndex,
77    /// Invalid transition
78    InvalidTransition,
79    /// Invalid leap second
80    InvalidLeapSecond,
81    /// Inconsistent extra transition rule relative to the last transition
82    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 {}