conjure_cp_essence_parser/
errors.rs1pub 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}