reda_lib/
error.rs

1use std::num::ParseFloatError;
2
3
4#[derive(Debug, thiserror::Error)]
5pub enum LibError {
6    #[error("except group")]
7    ExceptLibGroup,
8
9    #[error("library param should only a name")]
10    LibraryParamLenUnmatch,
11
12    #[error("expect attr {0} but not found")]
13    MissAttr(String),
14
15    #[error("unsupport direction lliteral {0}")]
16    UnsupportDirection(String),
17
18    #[error("unsupport antenna diode {0}")]
19    UnsupportAntennaDiodeType(String),
20
21    #[error("unsupport driver type {0}")]
22    UnsupportDriverType(String),
23
24    #[error("unsupport dont fault {0}")]
25    UnsupportDontFault(String),
26
27    #[error("unsupport next state type {0}")]
28    UnsupportNextStateType(String),
29
30    #[error("unsupport enum {1} for {0}")]
31    UnsupportEnumValue(&'static str, String),
32
33    #[error("not only ff group")]
34    NotOnlyFF,
35
36    #[error(transparent)]
37    Io(#[from] std::io::Error),
38
39    #[error(transparent)]
40    ParseFloat(ParseFloatError),
41
42    #[error("parse expr rror: {0}")]
43    ParseExpr(String),
44
45    #[error("parse error: {0}")]
46    Parse(String),
47
48    #[error("value kind unmatch, expect {0} but got {1}")]
49    ValueKindUnmatch(&'static str, &'static str),
50
51    #[error("{0} >> {1}")]
52    Context(String, Box<LibError>),
53}
54
55pub type LibResult<T> = Result<T, LibError>;
56
57pub trait LibErrorContext {
58    fn context<S: Into<String>>(self, f: impl Fn() -> S) -> Self;
59}
60
61impl<T> LibErrorContext for Result<T, LibError> {
62    fn context<S: Into<String>>(self, f: impl Fn() -> S) -> Self {
63        self.map_err(|e| LibError::Context(f().into(), Box::new(e)))
64    }
65}