1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
use std::fmt;
pub type Result<T> = ::std::result::Result<T, Error>;
#[derive(Debug)]
pub enum Error {
ParseError,
UnclosedOpenParen,
InvalidRepeat,
RecursionExceeded,
LookBehindNotConst,
TrailingBackslash,
InvalidEscape(String),
UnclosedUnicodeName,
InvalidHex,
InvalidCodepointValue,
InvalidClass,
UnknownFlag(String),
NonUnicodeUnsupported,
InvalidBackref,
InnerError(regex::Error),
InvalidGroupName,
InvalidGroupNameBackref(String),
NamedBackrefOnly,
TargetNotRepeatable,
StackOverflow,
BacktrackLimitExceeded,
#[doc(hidden)]
__Nonexhaustive,
}
impl ::std::error::Error for Error {}
impl fmt::Display for Error {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self {
Error::ParseError => write!(f, "General parsing error"),
Error::UnclosedOpenParen => {
write!(f, "Opening parenthesis without closing parenthesis")
}
Error::InvalidRepeat => write!(f, "Invalid repeat syntax"),
Error::RecursionExceeded => write!(f, "Pattern too deeply nested"),
Error::LookBehindNotConst => write!(f, "Look-behind assertion without constant size"),
Error::TrailingBackslash => write!(f, "Backslash without following character"),
Error::InvalidEscape(s) => write!(f, "Invalid escape: {}", s),
Error::UnclosedUnicodeName => write!(f, "Unicode escape not closed"),
Error::InvalidHex => write!(f, "Invalid hex escape"),
Error::InvalidCodepointValue => {
write!(f, "Invalid codepoint for hex or unicode escape")
}
Error::InvalidClass => write!(f, "Invalid character class"),
Error::UnknownFlag(s) => write!(f, "Unknown group flag: {}", s),
Error::NonUnicodeUnsupported => write!(f, "Disabling Unicode not supported"),
Error::InvalidBackref => write!(f, "Invalid back reference"),
Error::InnerError(e) => write!(f, "Regex error: {}", e),
Error::StackOverflow => write!(f, "Max stack size exceeded for backtracking"),
Error::BacktrackLimitExceeded => write!(f, "Max limit for backtracking count exceeded"),
Error::__Nonexhaustive => unreachable!(),
Error::InvalidGroupName => write!(f, "Could not parse group name"),
Error::InvalidGroupNameBackref(s) => write!(f, "Invalid group name in back reference: {}", s),
Error::TargetNotRepeatable => write!(f, "Target of repeat operator is invalid"),
Error::NamedBackrefOnly => write!(f, "Numbered backref/call not allowed because named group was used, use a named backref instead"),
}
}
}