use std::borrow::Cow;
use crate::coords::Coords;
pub type ParserResult<T> = Result<T, ParserError>;
#[derive(Debug, Copy, Clone)]
pub enum Stage {
Lexer,
Parser,
}
#[derive(Debug, Clone)]
pub enum Details {
EndOfInput,
StreamFailure,
NonUtf8InputDetected,
UnexpectedToken,
PairExpected,
InvalidObject,
InvalidArray,
InvalidCharacter(char),
MatchFailed,
InvalidNumericRepresentation(String),
InvalidEscapeSequence(String),
InvalidUnicodeEscapeSequence(String),
}
#[derive(Debug, Clone)]
pub struct ParserError {
pub stage: Stage,
pub details: Details,
pub coords: Option<Coords>,
}
#[macro_export]
macro_rules! lexer_error {
($details: expr, $coords : expr) => {
Err(ParserError {
stage: Stage::Lexer,
details: $details,
coords: Some($coords),
})
};
}
#[macro_export]
macro_rules! parser_error {
($details: expr, $coords: expr) => {
Err(ParserError {
stage: Stage::Parser,
details: $details,
coords: Some($coords),
})
};
}