]>
Commit | Line | Data |
---|---|---|
57c96c19 EH |
1 | use std::fmt; |
2 | ||
3 | #[derive(Debug)] | |
4 | pub struct ParseError { | |
5 | kind: ParseErrorKind, | |
6 | orig: String, | |
7 | } | |
8 | ||
6eefe3c2 | 9 | #[non_exhaustive] |
57c96c19 EH |
10 | #[derive(Debug)] |
11 | pub enum ParseErrorKind { | |
12 | UnterminatedString, | |
13 | UnexpectedChar(char), | |
14 | UnexpectedToken { | |
15 | expected: &'static str, | |
16 | found: &'static str, | |
17 | }, | |
18 | IncompleteExpr(&'static str), | |
19 | UnterminatedExpression(String), | |
20 | InvalidTarget(String), | |
57c96c19 EH |
21 | } |
22 | ||
23 | impl fmt::Display for ParseError { | |
24 | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { | |
25 | write!( | |
26 | f, | |
27 | "failed to parse `{}` as a cfg expression: {}", | |
28 | self.orig, self.kind | |
29 | ) | |
30 | } | |
31 | } | |
32 | ||
33 | impl fmt::Display for ParseErrorKind { | |
34 | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { | |
35 | use ParseErrorKind::*; | |
36 | match self { | |
37 | UnterminatedString => write!(f, "unterminated string in cfg"), | |
38 | UnexpectedChar(ch) => write!( | |
39 | f, | |
40 | "unexpected character `{}` in cfg, expected parens, a comma, \ | |
41 | an identifier, or a string", | |
42 | ch | |
43 | ), | |
44 | UnexpectedToken { expected, found } => { | |
45 | write!(f, "expected {}, found {}", expected, found) | |
46 | } | |
47 | IncompleteExpr(expected) => { | |
48 | write!(f, "expected {}, but cfg expression ended", expected) | |
49 | } | |
50 | UnterminatedExpression(s) => { | |
51 | write!(f, "unexpected content `{}` found after cfg expression", s) | |
52 | } | |
53 | InvalidTarget(s) => write!(f, "invalid target specifier: {}", s), | |
57c96c19 EH |
54 | } |
55 | } | |
56 | } | |
57 | ||
58 | impl std::error::Error for ParseError {} | |
59 | ||
60 | impl ParseError { | |
61 | pub fn new(orig: &str, kind: ParseErrorKind) -> ParseError { | |
62 | ParseError { | |
63 | kind, | |
64 | orig: orig.to_string(), | |
65 | } | |
66 | } | |
67 | } |