use std::error::Error;
use std::fmt;
use super::JsonPrettyErrorKind;
pub struct JsonPrettyError {
kind: JsonPrettyErrorKind,
offset: Option<usize>,
source: Option<Box<dyn Error + Send + Sync>>,
}
impl JsonPrettyError {
pub(super) fn new(
kind: JsonPrettyErrorKind,
offset: Option<usize>,
source: Option<Box<dyn Error + Send + Sync>>,
) -> Self {
Self { kind, offset, source }
}
pub fn kind(&self) -> JsonPrettyErrorKind {
self.kind
}
pub fn offset(&self) -> Option<usize> {
self.offset
}
}
impl fmt::Debug for JsonPrettyError {
fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
formatter
.debug_struct("JsonPrettyError")
.field("kind", &self.kind)
.field("offset", &self.offset)
.finish()
}
}
impl fmt::Display for JsonPrettyError {
fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
match self.offset {
Some(offset) => write!(formatter, "{} at byte offset {offset}", self.kind),
None => fmt::Display::fmt(&self.kind, formatter),
}
}
}
impl Error for JsonPrettyError {
fn source(&self) -> Option<&(dyn Error + 'static)> {
self.source.as_deref().map(|error| error as _)
}
}