80 lines
2.1 KiB
Rust
80 lines
2.1 KiB
Rust
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"),
|
|
}
|
|
}
|
|
}
|
|
}
|