| use crate::std::fmt; | |
| use crate::{builder, parser}; | |
| /// A general error that can occur when working with UUIDs. | |
| // TODO: improve the doc | |
| // BODY: This detail should be fine for initial merge | |
| #[derive(Clone, Debug, Eq, Hash, PartialEq)] | |
| pub struct Error(Inner); | |
| // TODO: write tests for Error | |
| // BODY: not immediately blocking, but should be covered for 1.0 | |
| #[derive(Clone, Debug, Eq, Hash, PartialEq)] | |
| enum Inner { | |
| /// An error occurred while handling [`Uuid`] bytes. | |
| /// | |
| /// See [`BytesError`] | |
| /// | |
| /// [`BytesError`]: struct.BytesError.html | |
| /// [`Uuid`]: struct.Uuid.html | |
| Build(builder::Error), | |
| /// An error occurred while parsing a [`Uuid`] string. | |
| /// | |
| /// See [`parser::ParseError`] | |
| /// | |
| /// [`parser::ParseError`]: parser/enum.ParseError.html | |
| /// [`Uuid`]: struct.Uuid.html | |
| Parser(parser::Error), | |
| } | |
| impl From<builder::Error> for Error { | |
| fn from(err: builder::Error) -> Self { | |
| Error(Inner::Build(err)) | |
| } | |
| } | |
| impl From<parser::Error> for Error { | |
| fn from(err: parser::Error) -> Self { | |
| Error(Inner::Parser(err)) | |
| } | |
| } | |
| impl fmt::Display for Error { | |
| fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { | |
| match self.0 { | |
| Inner::Build(ref err) => fmt::Display::fmt(&err, f), | |
| Inner::Parser(ref err) => fmt::Display::fmt(&err, f), | |
| } | |
| } | |
| } | |
| #[cfg(feature = "std")] | |
| mod std_support { | |
| use super::*; | |
| use crate::std::error; | |
| impl error::Error for Error { | |
| fn source(&self) -> Option<&(dyn error::Error + 'static)> { | |
| match self.0 { | |
| Inner::Build(ref err) => Some(err), | |
| Inner::Parser(ref err) => Some(err), | |
| } | |
| } | |
| } | |
| } | |
| #[cfg(test)] | |
| mod test_util { | |
| use super::*; | |
| impl Error { | |
| pub(crate) fn expect_parser(self) -> parser::Error { | |
| match self.0 { | |
| Inner::Parser(err) => err, | |
| _ => panic!("expected a `parser::Error` variant"), | |
| } | |
| } | |
| } | |
| } |