time/error/
mod.rs
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
20use core::fmt;
21
22pub use component_range::ComponentRange;
23pub use conversion_range::ConversionRange;
24pub use different_variant::DifferentVariant;
25#[cfg(feature = "formatting")]
26pub use format::Format;
27#[cfg(feature = "local-offset")]
28pub use indeterminate_offset::IndeterminateOffset;
29#[cfg(all(any(feature = "formatting", feature = "parsing"), feature = "alloc"))]
30pub use invalid_format_description::InvalidFormatDescription;
31pub use invalid_variant::InvalidVariant;
32#[cfg(feature = "parsing")]
33pub use parse::Parse;
34#[cfg(feature = "parsing")]
35pub use parse_from_description::ParseFromDescription;
36#[cfg(feature = "parsing")]
37pub use try_from_parsed::TryFromParsed;
38
39#[cfg(feature = "parsing")]
40use crate::internal_macros::bug;
41
42#[allow(missing_copy_implementations, variant_size_differences)]
47#[non_exhaustive]
48#[derive(Debug)]
49pub enum Error {
50 #[allow(missing_docs)]
51 ConversionRange(ConversionRange),
52 #[allow(missing_docs)]
53 ComponentRange(ComponentRange),
54 #[cfg(feature = "local-offset")]
55 #[allow(missing_docs)]
56 IndeterminateOffset(IndeterminateOffset),
57 #[cfg(feature = "formatting")]
58 #[allow(missing_docs)]
59 Format(Format),
60 #[cfg(feature = "parsing")]
61 #[allow(missing_docs)]
62 ParseFromDescription(ParseFromDescription),
63 #[cfg(feature = "parsing")]
64 #[allow(missing_docs)]
65 #[non_exhaustive]
66 #[deprecated(
67 since = "0.3.28",
68 note = "no longer output. moved to the `ParseFromDescription` variant"
69 )]
70 UnexpectedTrailingCharacters,
71 #[cfg(feature = "parsing")]
72 #[allow(missing_docs)]
73 TryFromParsed(TryFromParsed),
74 #[cfg(all(any(feature = "formatting", feature = "parsing"), feature = "alloc"))]
75 #[allow(missing_docs)]
76 InvalidFormatDescription(InvalidFormatDescription),
77 #[allow(missing_docs)]
78 DifferentVariant(DifferentVariant),
79 #[allow(missing_docs)]
80 InvalidVariant(InvalidVariant),
81}
82
83impl fmt::Display for Error {
84 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
85 match self {
86 Self::ConversionRange(e) => e.fmt(f),
87 Self::ComponentRange(e) => e.fmt(f),
88 #[cfg(feature = "local-offset")]
89 Self::IndeterminateOffset(e) => e.fmt(f),
90 #[cfg(feature = "formatting")]
91 Self::Format(e) => e.fmt(f),
92 #[cfg(feature = "parsing")]
93 Self::ParseFromDescription(e) => e.fmt(f),
94 #[cfg(feature = "parsing")]
95 #[allow(deprecated)]
96 Self::UnexpectedTrailingCharacters => bug!("variant should not be used"),
97 #[cfg(feature = "parsing")]
98 Self::TryFromParsed(e) => e.fmt(f),
99 #[cfg(all(any(feature = "formatting", feature = "parsing"), feature = "alloc"))]
100 Self::InvalidFormatDescription(e) => e.fmt(f),
101 Self::DifferentVariant(e) => e.fmt(f),
102 Self::InvalidVariant(e) => e.fmt(f),
103 }
104 }
105}
106
107#[cfg(feature = "std")]
108#[allow(clippy::std_instead_of_core)]
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 => bug!("variant should not be used"),
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}