work_tock_lib/
err.rs

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}