harmony_jolt/dsl/
error.rs1use std::fmt;
2use std::error::Error;
3use std::num::ParseIntError;
4use thiserror::Error as ThisError;
5use super::token::Token;
6
7#[derive(Debug, PartialEq)]
8pub struct ParseError {
9 pub(crate) pos: usize,
10 pub(crate) cause: Box<ParseErrorCause>,
11}
12
13#[derive(Debug, ThisError, PartialEq)]
14pub enum ParseErrorCause {
15 #[error("Unexpected end of input")]
16 UnexpectedEndOfInput,
17 #[error("Unexpected character: '{0}'")]
18 UnexpectedChar(char),
19 #[error("Unexpected token: {0:?}")]
20 UnexpectedToken(Token),
21 #[error("Invalid index literal: {raw}\n{source}")]
22 InvalidIndex {
23 raw: String,
24 #[source]
25 source: ParseIntError,
26 },
27 #[error("Maximum recursion depth ({0}) reached.")]
28 MaximumRecursion(usize),
29 #[error("put_back buffer is already full. THIS SHOULD NEVER HAPPEN.")]
30 PutBackBufferFull,
31 #[error("expected an index value but failed to find it.")]
32 ExpectedIdx,
33}
34
35impl fmt::Display for ParseError {
36 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
37 write!(
38 f,
39 "Failed to parse input. Error near {}.\n{}",
40 self.pos, self.cause
41 )
42 }
43}
44
45impl Error for ParseError {}