oca_file_semantics/ocafile/
error.rs

1use thiserror::Error;
2
3#[derive(thiserror::Error, Debug, serde::Serialize)]
4#[serde(untagged)]
5pub enum ParseError {
6    #[error("Error at line {line_number} ({raw_line}): {message}")]
7    GrammarError {
8        #[serde(rename = "ln")]
9        line_number: usize,
10        #[serde(rename = "col")]
11        column_number: usize,
12        #[serde(rename = "c")]
13        raw_line: String,
14        #[serde(rename = "e")]
15        message: String,
16    },
17    #[error("Error parsing meta: {0}")]
18    MetaError(String),
19
20    #[error("Error parsing instruction: {0}")]
21    InstructionError(#[from] InstructionError),
22
23    #[error("{0}")]
24    Custom(String),
25}
26
27#[derive(Error, Debug, serde::Serialize)]
28pub enum InstructionError {
29    #[error("{0}")]
30    UnexpectedToken(String),
31
32    #[error("{0}")]
33    Parser(String),
34
35    #[error("{0}")]
36    Unknown(String),
37
38    #[error(transparent)]
39    ExtractError(#[from] ExtractingAttributeError),
40}
41
42#[derive(Error, Debug, serde::Serialize)]
43pub enum ExtractingAttributeError {
44    #[error("Said error: {0}")]
45    SaidError(#[from] said::error::Error),
46
47    #[error("Unexpected error: {0}")]
48    Unexpected(String),
49}