cheep-crator-2/vendor/uuid/src/error.rs

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"),
}
}
}
}