use core::fmt;
use crate::{
array::ParseArrayError, literal::ParseLiteralError, number::ParseNumberError,
object::ParseObjectError, string::ParseStringError,
};
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub enum ParseAnyError {
String(ParseStringError),
Number(ParseNumberError),
Object(ParseObjectError),
Array(ParseArrayError),
Literal(ParseLiteralError),
}
impl fmt::Display for ParseAnyError {
#[inline]
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::String(err) => err.fmt(f),
Self::Number(err) => err.fmt(f),
Self::Object(err) => err.fmt(f),
Self::Array(err) => err.fmt(f),
Self::Literal(err) => err.fmt(f),
}
}
}
#[cfg(feature = "std")]
impl std::error::Error for ParseAnyError {
#[inline]
fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
Some(match self {
Self::String(err) => err,
Self::Number(err) => err,
Self::Object(err) => err,
Self::Array(err) => err,
Self::Literal(err) => err,
})
}
}
impl From<ParseStringError> for ParseAnyError {
#[inline]
fn from(value: ParseStringError) -> Self {
Self::String(value)
}
}
impl From<ParseNumberError> for ParseAnyError {
#[inline]
fn from(value: ParseNumberError) -> Self {
Self::Number(value)
}
}
impl From<ParseObjectError> for ParseAnyError {
#[inline]
fn from(value: ParseObjectError) -> Self {
Self::Object(value)
}
}
impl From<ParseArrayError> for ParseAnyError {
#[inline]
fn from(value: ParseArrayError) -> Self {
Self::Array(value)
}
}
impl From<ParseLiteralError> for ParseAnyError {
#[inline]
fn from(value: ParseLiteralError) -> Self {
Self::Literal(value)
}
}