//! Various error types returned by methods in the time crate. mod component_range; mod conversion_range; mod different_variant; #[cfg(feature = "formatting")] mod format; #[cfg(feature = "local-offset")] mod indeterminate_offset; #[cfg(all(any(feature = "formatting", feature = "parsing"), feature = "alloc"))] mod invalid_format_description; mod invalid_variant; #[cfg(feature = "parsing")] mod parse; #[cfg(feature = "parsing")] mod parse_from_description; #[cfg(feature = "parsing")] mod try_from_parsed; use core::fmt; pub use component_range::ComponentRange; pub use conversion_range::ConversionRange; pub use different_variant::DifferentVariant; #[cfg(feature = "formatting")] pub use format::Format; #[cfg(feature = "local-offset")] pub use indeterminate_offset::IndeterminateOffset; #[cfg(all(any(feature = "formatting", feature = "parsing"), feature = "alloc"))] pub use invalid_format_description::InvalidFormatDescription; pub use invalid_variant::InvalidVariant; #[cfg(feature = "parsing")] pub use parse::Parse; #[cfg(feature = "parsing")] pub use parse_from_description::ParseFromDescription; #[cfg(feature = "parsing")] pub use try_from_parsed::TryFromParsed; /// A unified error type for anything returned by a method in the time crate. /// /// This can be used when you either don't know or don't care about the exact error returned. /// `Result<_, time::Error>` (or its alias `time::Result<_>`) will work in these situations. #[allow(missing_copy_implementations, variant_size_differences)] #[allow(clippy::missing_docs_in_private_items)] // variants only #[non_exhaustive] #[derive(Debug)] pub enum Error { ConversionRange(ConversionRange), ComponentRange(ComponentRange), #[cfg(feature = "local-offset")] IndeterminateOffset(IndeterminateOffset), #[cfg(feature = "formatting")] Format(Format), #[cfg(feature = "parsing")] ParseFromDescription(ParseFromDescription), #[cfg(feature = "parsing")] #[non_exhaustive] UnexpectedTrailingCharacters, #[cfg(feature = "parsing")] TryFromParsed(TryFromParsed), #[cfg(all(any(feature = "formatting", feature = "parsing"), feature = "alloc"))] InvalidFormatDescription(InvalidFormatDescription), DifferentVariant(DifferentVariant), InvalidVariant(InvalidVariant), } impl fmt::Display for Error { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match self { Self::ConversionRange(e) => e.fmt(f), Self::ComponentRange(e) => e.fmt(f), #[cfg(feature = "local-offset")] Self::IndeterminateOffset(e) => e.fmt(f), #[cfg(feature = "formatting")] Self::Format(e) => e.fmt(f), #[cfg(feature = "parsing")] Self::ParseFromDescription(e) => e.fmt(f), #[cfg(feature = "parsing")] Self::UnexpectedTrailingCharacters => f.write_str("unexpected trailing characters"), #[cfg(feature = "parsing")] Self::TryFromParsed(e) => e.fmt(f), #[cfg(all(any(feature = "formatting", feature = "parsing"), feature = "alloc"))] Self::InvalidFormatDescription(e) => e.fmt(f), Self::DifferentVariant(e) => e.fmt(f), Self::InvalidVariant(e) => e.fmt(f), } } } #[cfg(feature = "std")] impl std::error::Error for Error { fn source(&self) -> Option<&(dyn std::error::Error + 'static)> { match self { Self::ConversionRange(err) => Some(err), Self::ComponentRange(err) => Some(err), #[cfg(feature = "local-offset")] Self::IndeterminateOffset(err) => Some(err), #[cfg(feature = "formatting")] Self::Format(err) => Some(err), #[cfg(feature = "parsing")] Self::ParseFromDescription(err) => Some(err), #[cfg(feature = "parsing")] Self::UnexpectedTrailingCharacters => None, #[cfg(feature = "parsing")] Self::TryFromParsed(err) => Some(err), #[cfg(all(any(feature = "formatting", feature = "parsing"), feature = "alloc"))] Self::InvalidFormatDescription(err) => Some(err), Self::DifferentVariant(err) => Some(err), Self::InvalidVariant(err) => Some(err), } } }