use std::ops::Range;
#[derive(Debug, Clone, PartialEq)]
pub enum ParseError<'a> {
BadToken(&'a str, Range<usize>),
FailedOnValidation(&'a str, usize),
FinishedOnFail,
ReachedEOF(usize),
UnreachedEOF(usize),
ExternalError(String, usize),
}
impl<'a> ToString for ParseError<'a> {
fn to_string(&self) -> String {
match self {
ParseError::BadToken(a, b) => format!("bad token {:?}, range: ([{:?}..{:?}])", a, b.start, b.end),
ParseError::FailedOnValidation(a, b) =>format!("validation failed on pos {:?}, mes:{:?} ",b,a),
ParseError::FinishedOnFail => format!("it finished parsing on the fail position"),
ParseError::ReachedEOF(p) => format!("the token stream is empty but the parser expects other tokens on {:?}",p),
ParseError::UnreachedEOF(p) => format!("the token stream is not empty and parser does not expect anything on {:?}",p),
ParseError::ExternalError(a, b) => format!("external error: {:?} on {:?}",a,b),
}
}
}