use std::fmt;
use super::JsonSyntaxErrorReason;
use crate::lexical::JsonLexicalFailure;
#[must_use]
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub struct JsonSyntaxError {
offset: usize,
line: usize,
column: usize,
reason: JsonSyntaxErrorReason,
}
impl JsonSyntaxError {
#[inline]
#[must_use = "return or inspect the constructed syntax error"]
pub const fn new(offset: usize, line: usize, column: usize, reason: JsonSyntaxErrorReason) -> Self {
Self {
offset,
line,
column,
reason,
}
}
pub(crate) fn from_lexical(failure: JsonLexicalFailure) -> Self {
Self::new(failure.offset, failure.line, failure.column, failure.reason.into())
}
#[must_use]
#[inline(always)]
pub const fn offset(&self) -> usize {
self.offset
}
#[must_use]
#[inline(always)]
pub const fn line(&self) -> usize {
self.line
}
#[must_use]
#[inline(always)]
pub const fn column(&self) -> usize {
self.column
}
#[must_use]
#[inline(always)]
pub const fn reason(&self) -> JsonSyntaxErrorReason {
self.reason
}
}
impl fmt::Display for JsonSyntaxError {
fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(
formatter,
"{} at line {} column {} (byte offset {})",
self.reason, self.line, self.column, self.offset,
)
}
}
impl std::error::Error for JsonSyntaxError {}