1
pub use conjure_cp_core::error::Error as ConjureParseError;
2
use conjure_cp_core::error::Error;
3
use serde_json::Error as JsonError;
4
use thiserror::Error as ThisError;
5

            
6
#[derive(Debug, ThisError)]
7
pub 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

            
30
impl EssenceParseError {
31
1825
    pub fn syntax_error(msg: String, range: Option<tree_sitter::Range>) -> Self {
32
1825
        EssenceParseError::SyntaxError { msg, range }
33
1825
    }
34
}
35

            
36
impl 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
}