suricatax_rule_parser/
lib.rs1use nom::Offset;
11
12use scanner::ScanError;
13
14pub mod scanner;
15
16#[derive(Debug, PartialEq, Eq, Clone)]
20#[non_exhaustive]
21pub struct Error {
22 pub offset: usize,
23 pub reason: String,
24}
25
26impl std::fmt::Display for Error {
27 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
28 write!(f, "error at offset {}: {}", self.offset, self.reason)
29 }
30}
31
32impl std::error::Error for Error {}
33
34impl Error {
35 pub(crate) fn from_nom_error(
37 err: nom::Err<ScanError<&str>>,
38 start: &str,
39 context: &str,
40 ) -> Self {
41 match err {
42 nom::Err::Incomplete(_) => Error {
43 offset: start.len(),
44 reason: format!("{context}: incomplete"),
45 },
46 nom::Err::Failure(err) | nom::Err::Error(err) => {
47 let offset = start.offset(err.input);
48 Error {
49 offset,
50 reason: format!("{}: {}", context, err.reason),
51 }
52 }
53 }
54 }
55}