conjure_cp_essence_parser/
errors.rs

1pub use conjure_cp_core::error::Error as ConjureParseError;
2use conjure_cp_core::error::Error;
3use serde_json::Error as JsonError;
4use thiserror::Error as ThisError;
5
6#[derive(Debug, ThisError)]
7pub enum EssenceParseError {
8    #[error("Could not parse Essence AST: {0}")]
9    TreeSitterError(String),
10    #[error("Error running `conjure pretty`: {0}")]
11    ConjurePrettyError(String),
12    #[error("Essence syntax error: {msg}{}",
13        match range {
14            Some(range) => format!(" at {}-{}", range.start_point, range.end_point),
15            None => "".to_string(),
16        }
17    )]
18    SyntaxError {
19        msg: String,
20        range: Option<tree_sitter::Range>,
21    },
22    #[error("JSON Error: {0}")]
23    JsonError(#[from] JsonError),
24    #[error("Error: {0} is not yet implemented.")]
25    NotImplemented(String),
26    #[error("Error: {0}")]
27    Other(Error),
28}
29
30impl EssenceParseError {
31    pub fn syntax_error(msg: String, range: Option<tree_sitter::Range>) -> Self {
32        EssenceParseError::SyntaxError { msg, range }
33    }
34}
35
36impl From<ConjureParseError> for EssenceParseError {
37    fn from(value: ConjureParseError) -> Self {
38        match value {
39            Error::Parse(msg) => EssenceParseError::syntax_error(msg, None),
40            Error::NotImplemented(msg) => EssenceParseError::NotImplemented(msg),
41            Error::Json(err) => EssenceParseError::JsonError(err),
42            Error::Other(err) => EssenceParseError::Other(err.into()),
43        }
44    }
45}