use ox_content_ast::Span;
use thiserror::Error;
pub type ParseResult<T> = Result<T, ParseError>;
#[derive(Debug, Error)]
pub enum ParseError {
#[error("unexpected token at {span:?}: expected {expected}, found {found}")]
UnexpectedToken {
span: Span,
expected: String,
found: String,
},
#[error("unexpected end of input at {span:?}")]
UnexpectedEof {
span: Span,
},
#[error("invalid syntax at {span:?}: {message}")]
InvalidSyntax {
span: Span,
message: String,
},
#[error("nesting too deep at {span:?}: maximum depth is {max_depth}")]
NestingTooDeep {
span: Span,
max_depth: usize,
},
}
impl ParseError {
#[must_use]
pub fn span(&self) -> Span {
match self {
Self::UnexpectedToken { span, .. }
| Self::UnexpectedEof { span }
| Self::InvalidSyntax { span, .. }
| Self::NestingTooDeep { span, .. } => *span,
}
}
}