1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
use pest;
use crate::de::Rule;
use anyhow::anyhow;
pub type Result<T> = std::result::Result<T, MyError>;
#[derive(Debug)]
pub struct MyError{
pub message : String,
pub source : String,
pub start : Option<usize>,
pub end : Option<usize>,
pub e : anyhow::Error,
}
impl MyError{
pub fn new(s : String, start : usize) -> MyError{
MyError{ message : s.to_string(), source : s.to_string(), start : Some(start), end : None,
e : anyhow!("{}",s.to_string()) }
}
}
impl Into<anyhow::Error> for MyError{
fn into(self) -> anyhow::Error { self.e }
}
impl From<pest::error::Error<Rule>> for MyError {
fn from(err: pest::error::Error<Rule>) -> Self {
match err.location{
pest::error::InputLocation::Pos(start) =>{
MyError{ message : err.to_string(), source : err.to_string(), start : Some(start), end : None,
e : anyhow!("{}", err.to_string()) }
},
pest::error::InputLocation::Span((start, end)) =>{
MyError{ message : err.to_string(), source : err.to_string(), start : Some(start), end : Some(end),
e : anyhow!("{}", err.to_string())}
}
}
}
}