1mod component_range;
4mod conversion_range;
5mod different_variant;
6#[cfg(feature = "formatting")]
7mod format;
8#[cfg(feature = "local-offset")]
9mod indeterminate_offset;
10#[cfg(all(any(feature = "formatting", feature = "parsing"), feature = "alloc"))]
11mod invalid_format_description;
12mod invalid_variant;
13#[cfg(feature = "parsing")]
14mod parse;
15#[cfg(feature = "parsing")]
16mod parse_from_description;
17#[cfg(feature = "parsing")]
18mod try_from_parsed;
19
20#[cfg(feature = "parsing")]
21use core::convert::Infallible;
22use core::fmt;
23
24pub use component_range::ComponentRange;
25pub use conversion_range::ConversionRange;
26pub use different_variant::DifferentVariant;
27#[cfg(feature = "formatting")]
28pub use format::Format;
29#[cfg(feature = "local-offset")]
30pub use indeterminate_offset::IndeterminateOffset;
31#[cfg(all(any(feature = "formatting", feature = "parsing"), feature = "alloc"))]
32pub use invalid_format_description::InvalidFormatDescription;
33pub use invalid_variant::InvalidVariant;
34#[cfg(feature = "parsing")]
35pub use parse::Parse;
36#[cfg(feature = "parsing")]
37pub use parse_from_description::ParseFromDescription;
38#[cfg(feature = "parsing")]
39pub use try_from_parsed::TryFromParsed;
40
41#[non_exhaustive]
46#[derive(Debug)]
47pub enum Error {
48 #[allow(missing_docs)]
49 ConversionRange(ConversionRange),
50 #[allow(missing_docs)]
51 ComponentRange(ComponentRange),
52 #[cfg(feature = "local-offset")]
53 #[allow(missing_docs)]
54 IndeterminateOffset(IndeterminateOffset),
55 #[cfg(feature = "formatting")]
56 #[allow(missing_docs)]
57 Format(Format),
58 #[cfg(feature = "parsing")]
59 #[allow(missing_docs)]
60 ParseFromDescription(ParseFromDescription),
61 #[cfg(feature = "parsing")]
62 #[allow(missing_docs)]
63 #[non_exhaustive]
64 #[deprecated(
65 since = "0.3.28",
66 note = "no longer output. moved to the `ParseFromDescription` variant"
67 )]
68 UnexpectedTrailingCharacters {
69 #[doc(hidden)]
70 never: Infallible,
71 },
72 #[cfg(feature = "parsing")]
73 #[allow(missing_docs)]
74 TryFromParsed(TryFromParsed),
75 #[cfg(all(any(feature = "formatting", feature = "parsing"), feature = "alloc"))]
76 #[allow(missing_docs)]
77 InvalidFormatDescription(InvalidFormatDescription),
78 #[allow(missing_docs)]
79 DifferentVariant(DifferentVariant),
80 #[allow(missing_docs)]
81 InvalidVariant(InvalidVariant),
82}
83
84impl fmt::Display for Error {
85 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
86 match self {
87 Self::ConversionRange(e) => e.fmt(f),
88 Self::ComponentRange(e) => e.fmt(f),
89 #[cfg(feature = "local-offset")]
90 Self::IndeterminateOffset(e) => e.fmt(f),
91 #[cfg(feature = "formatting")]
92 Self::Format(e) => e.fmt(f),
93 #[cfg(feature = "parsing")]
94 Self::ParseFromDescription(e) => e.fmt(f),
95 #[cfg(feature = "parsing")]
96 #[allow(deprecated)]
97 Self::UnexpectedTrailingCharacters { never } => match *never {},
98 #[cfg(feature = "parsing")]
99 Self::TryFromParsed(e) => e.fmt(f),
100 #[cfg(all(any(feature = "formatting", feature = "parsing"), feature = "alloc"))]
101 Self::InvalidFormatDescription(e) => e.fmt(f),
102 Self::DifferentVariant(e) => e.fmt(f),
103 Self::InvalidVariant(e) => e.fmt(f),
104 }
105 }
106}
107
108#[cfg(feature = "std")]
109impl std::error::Error for Error {
110 fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
111 match self {
112 Self::ConversionRange(err) => Some(err),
113 Self::ComponentRange(err) => Some(err),
114 #[cfg(feature = "local-offset")]
115 Self::IndeterminateOffset(err) => Some(err),
116 #[cfg(feature = "formatting")]
117 Self::Format(err) => Some(err),
118 #[cfg(feature = "parsing")]
119 Self::ParseFromDescription(err) => Some(err),
120 #[cfg(feature = "parsing")]
121 #[allow(deprecated)]
122 Self::UnexpectedTrailingCharacters { never } => match *never {},
123 #[cfg(feature = "parsing")]
124 Self::TryFromParsed(err) => Some(err),
125 #[cfg(all(any(feature = "formatting", feature = "parsing"), feature = "alloc"))]
126 Self::InvalidFormatDescription(err) => Some(err),
127 Self::DifferentVariant(err) => Some(err),
128 Self::InvalidVariant(err) => Some(err),
129 }
130 }
131}