1use std;
2use std::fmt::Display;
3
4pub type Result<T> = std::result::Result<T, Error>;
5
6#[derive(Debug)]
7pub enum Error {
8 Parse,
9 Syntax(Option<(usize, String)>, String),
10 Message(&'static str),
11}
12
13impl Display for Error {
14 fn fmt(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
15 match *self {
16 Error::Message(ref msg) => formatter.write_str(msg),
17 Error::Syntax(ref line, ref reason) => {
18 if let Some((line_n, line)) = line {
19 write!(formatter, "Syntax error on line {}: {}\n {}", line_n + 1, reason, line)
20 } else {
21 write!(formatter, "Syntax error: {}", reason)
22 }
23 },
24 Error::Parse => formatter.write_str("Parsing error"),
25 }
26 }
27}
28
29