diff options
Diffstat (limited to 'vendor/time/src/error/parse.rs')
| -rw-r--r-- | vendor/time/src/error/parse.rs | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/vendor/time/src/error/parse.rs b/vendor/time/src/error/parse.rs new file mode 100644 index 00000000..ee3f87b7 --- /dev/null +++ b/vendor/time/src/error/parse.rs @@ -0,0 +1,109 @@ +//! Error that occurred at some stage of parsing + +use core::convert::Infallible; +use core::fmt; + +use crate::error::{self, ParseFromDescription, TryFromParsed}; + +/// An error that occurred at some stage of parsing. +#[non_exhaustive] +#[allow(variant_size_differences)] +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum Parse { + #[allow(missing_docs)] + TryFromParsed(TryFromParsed), + #[allow(missing_docs)] + ParseFromDescription(ParseFromDescription), + #[allow(missing_docs)] + #[non_exhaustive] + #[deprecated( + since = "0.3.28", + note = "no longer output. moved to the `ParseFromDescription` variant" + )] + UnexpectedTrailingCharacters { + #[doc(hidden)] + never: Infallible, + }, +} + +impl fmt::Display for Parse { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + Self::TryFromParsed(err) => err.fmt(f), + Self::ParseFromDescription(err) => err.fmt(f), + #[allow(deprecated)] + Self::UnexpectedTrailingCharacters { never } => match *never {}, + } + } +} + +#[cfg(feature = "std")] +impl std::error::Error for Parse { + fn source(&self) -> Option<&(dyn std::error::Error + 'static)> { + match self { + Self::TryFromParsed(err) => Some(err), + Self::ParseFromDescription(err) => Some(err), + #[allow(deprecated)] + Self::UnexpectedTrailingCharacters { never } => match *never {}, + } + } +} + +impl From<TryFromParsed> for Parse { + fn from(err: TryFromParsed) -> Self { + Self::TryFromParsed(err) + } +} + +impl TryFrom<Parse> for TryFromParsed { + type Error = error::DifferentVariant; + + fn try_from(err: Parse) -> Result<Self, Self::Error> { + match err { + Parse::TryFromParsed(err) => Ok(err), + _ => Err(error::DifferentVariant), + } + } +} + +impl From<ParseFromDescription> for Parse { + fn from(err: ParseFromDescription) -> Self { + Self::ParseFromDescription(err) + } +} + +impl TryFrom<Parse> for ParseFromDescription { + type Error = error::DifferentVariant; + + fn try_from(err: Parse) -> Result<Self, Self::Error> { + match err { + Parse::ParseFromDescription(err) => Ok(err), + _ => Err(error::DifferentVariant), + } + } +} + +impl From<Parse> for crate::Error { + fn from(err: Parse) -> Self { + match err { + Parse::TryFromParsed(err) => Self::TryFromParsed(err), + Parse::ParseFromDescription(err) => Self::ParseFromDescription(err), + #[allow(deprecated)] + Parse::UnexpectedTrailingCharacters { never } => match never {}, + } + } +} + +impl TryFrom<crate::Error> for Parse { + type Error = error::DifferentVariant; + + fn try_from(err: crate::Error) -> Result<Self, Self::Error> { + match err { + crate::Error::ParseFromDescription(err) => Ok(Self::ParseFromDescription(err)), + #[allow(deprecated)] + crate::Error::UnexpectedTrailingCharacters { never } => match never {}, + crate::Error::TryFromParsed(err) => Ok(Self::TryFromParsed(err)), + _ => Err(error::DifferentVariant), + } + } +} |
