use std::error::Error;
use std::fmt::Display;
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum ParseError {
UnknownError,
InvalidToken,
UnexpectedEOF,
InvalidEscapeSequence,
TrailingComma,
TypeError,
MissingField,
RecursionDepthExceeded,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct TracebackError {
pub(crate) line: usize,
pub(crate) column: usize,
pub(crate) kind: ParseError,
}
impl From<TracebackError> for ParseError {
fn from(error: TracebackError) -> Self {
error.kind
}
}
impl Display for TracebackError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "error at {}:{}: {:?}", self.line, self.column, self.kind)
}
}
impl Display for ParseError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{:?}", self)
}
}
impl Error for TracebackError {}
impl Error for ParseError {}