biscuit_parser/
error.rs

1use thiserror::Error;
2
3#[derive(Error, Clone, Debug, PartialEq, Eq)]
4#[cfg_attr(feature = "serde-error", derive(serde::Serialize, serde::Deserialize))]
5pub enum LanguageError {
6    #[error("datalog parsing error: {0:?}")]
7    ParseError(ParseErrors),
8    #[error("datalog parameters must all be bound, provided values must all be used.\nMissing parameters: {missing_parameters:?}\nUnused parameters: {unused_parameters:?}")]
9    Parameters {
10        missing_parameters: Vec<String>,
11        unused_parameters: Vec<String>,
12    },
13}
14
15#[derive(Clone, Debug, PartialEq, Eq)]
16#[cfg_attr(feature = "serde-error", derive(serde::Serialize, serde::Deserialize))]
17pub struct ParseErrors {
18    pub errors: Vec<ParseError>,
19}
20
21#[derive(Clone, Debug, PartialEq, Eq)]
22#[cfg_attr(feature = "serde-error", derive(serde::Serialize, serde::Deserialize))]
23pub struct ParseError {
24    pub input: String,
25    pub message: Option<String>,
26}
27
28impl<'a> From<crate::parser::Error<'a>> for ParseError {
29    fn from(e: crate::parser::Error<'a>) -> Self {
30        ParseError {
31            input: e.input.to_string(),
32            message: e.message,
33        }
34    }
35}
36
37impl<'a> From<crate::parser::Error<'a>> for ParseErrors {
38    fn from(error: crate::parser::Error<'a>) -> Self {
39        ParseErrors {
40            errors: vec![error.into()],
41        }
42    }
43}
44
45impl<'a> From<Vec<crate::parser::Error<'a>>> for ParseErrors {
46    fn from(errors: Vec<crate::parser::Error<'a>>) -> Self {
47        ParseErrors {
48            errors: errors.into_iter().map(|e| e.into()).collect(),
49        }
50    }
51}
52
53impl<'a> From<crate::parser::Error<'a>> for LanguageError {
54    fn from(e: crate::parser::Error<'a>) -> Self {
55        LanguageError::ParseError(e.into())
56    }
57}
58
59impl<'a> From<Vec<crate::parser::Error<'a>>> for LanguageError {
60    fn from(e: Vec<crate::parser::Error<'a>>) -> Self {
61        LanguageError::ParseError(e.into())
62    }
63}