use std::error::Error;
use std::fmt;
#[derive(Debug, Clone)]
pub enum ParseError {
Message(String),
Utf8Error(std::str::Utf8Error),
UnexpectedNode(String),
TreeSitterError(String),
}
impl fmt::Display for ParseError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Message(message) => f.write_str(message),
Self::Utf8Error(err) => write!(f, "{err}"),
Self::UnexpectedNode(node) => write!(f, "Unexpected node: {node}"),
Self::TreeSitterError(message) => write!(f, "TreeSitterError: {message}"),
}
}
}
impl Error for ParseError {
fn source(&self) -> Option<&(dyn Error + 'static)> {
match self {
Self::Utf8Error(err) => Some(err),
_ => None,
}
}
}
impl From<std::str::Utf8Error> for ParseError {
fn from(err: std::str::Utf8Error) -> Self {
Self::Utf8Error(err)
}
}
pub type ParserResult<T> = Result<T, ParseError>;