| //! Error converting a [`Parsed`](crate::parsing::Parsed) struct to another type |
| |
| use core::fmt; |
| |
| use crate::error; |
| |
| /// An error that occurred when converting a [`Parsed`](crate::parsing::Parsed) to another type. |
| #[non_exhaustive] |
| #[derive(Debug, Clone, Copy, PartialEq, Eq)] |
| pub enum TryFromParsed { |
| /// The [`Parsed`](crate::parsing::Parsed) did not include enough information to construct the |
| /// type. |
| InsufficientInformation, |
| /// Some component contained an invalid value for the type. |
| ComponentRange(error::ComponentRange), |
| } |
| |
| impl fmt::Display for TryFromParsed { |
| fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { |
| match self { |
| Self::InsufficientInformation => f.write_str( |
| "the `Parsed` struct did not include enough information to construct the type", |
| ), |
| Self::ComponentRange(err) => err.fmt(f), |
| } |
| } |
| } |
| |
| impl From<error::ComponentRange> for TryFromParsed { |
| fn from(v: error::ComponentRange) -> Self { |
| Self::ComponentRange(v) |
| } |
| } |
| |
| impl TryFrom<TryFromParsed> for error::ComponentRange { |
| type Error = error::DifferentVariant; |
| |
| fn try_from(err: TryFromParsed) -> Result<Self, Self::Error> { |
| match err { |
| TryFromParsed::ComponentRange(err) => Ok(err), |
| _ => Err(error::DifferentVariant), |
| } |
| } |
| } |
| |
| #[cfg(feature = "std")] |
| impl std::error::Error for TryFromParsed { |
| fn source(&self) -> Option<&(dyn std::error::Error + 'static)> { |
| match self { |
| Self::InsufficientInformation => None, |
| Self::ComponentRange(err) => Some(err), |
| } |
| } |
| } |
| |
| impl From<TryFromParsed> for crate::Error { |
| fn from(original: TryFromParsed) -> Self { |
| Self::TryFromParsed(original) |
| } |
| } |
| |
| impl TryFrom<crate::Error> for TryFromParsed { |
| type Error = error::DifferentVariant; |
| |
| fn try_from(err: crate::Error) -> Result<Self, Self::Error> { |
| match err { |
| crate::Error::TryFromParsed(err) => Ok(err), |
| _ => Err(error::DifferentVariant), |
| } |
| } |
| } |