1use failure_derive::*;
2use gobble::StrungError;
3
4#[derive(Debug, PartialEq, Fail)]
5#[fail(display = "Err on line {}: {}", line, err)]
6pub struct LineErr {
7 pub line: usize,
8 pub err: TokErr,
9}
10
11#[derive(Debug, PartialEq, Fail)]
12pub enum TokErr {
13 #[fail(display = "{}", 0)]
14 Mess(String),
15 #[fail(display = "Not Set : {}", 0)]
16 NotSet(&'static str),
17 #[fail(display = "{}", 0)]
18 ParseErr(StrungError),
19 #[fail(display = "Cannot parse int")]
20 ParseIntErr,
21 #[fail(display = "No Token")]
22 NoToken,
23 #[fail(display = "Cannot work for negative time")]
24 NegativeTime,
25 #[fail(display = "Processing errors {:?}", 0)]
26 Lines(Vec<LineErr>),
27}
28
29impl TokErr {
30 pub fn on_line(self, n: usize) -> LineErr {
31 LineErr { line: n, err: self }
32 }
33}
34
35impl From<&str> for TokErr {
36 fn from(s: &str) -> Self {
37 TokErr::Mess(s.to_string())
38 }
39}
40
41impl From<String> for TokErr {
42 fn from(s: String) -> Self {
43 TokErr::Mess(s.to_string())
44 }
45}
46
47impl From<std::num::ParseIntError> for TokErr {
48 fn from(_: std::num::ParseIntError) -> Self {
49 TokErr::ParseIntErr
50 }
51}
52
53impl From<gobble::StrungError> for TokErr {
54 fn from(e: gobble::StrungError) -> Self {
55 TokErr::ParseErr(e)
56 }
57}