pub struct ParserError {
pub position: usize,
pub expected: Vec<String>,
}
Expand description
Contains the position in the input at which a parsing error occurred, and a Vec of token names we expected to see instead.
Fields§
§position: usize
§expected: Vec<String>
Implementations§
Source§impl ParserError
impl ParserError
Sourcepub fn from_parser<'a, T: Input<'a>>(parser: &mut Rdp<T>) -> ParserError
pub fn from_parser<'a, T: Input<'a>>(parser: &mut Rdp<T>) -> ParserError
Extract error information from a parser.
Examples found in repository?
examples/cli.rs (line 28)
5fn main() {
6 let packet = if args().len() == 2 {
7 args().nth(1).unwrap()
8 } else {
9 "2bT12.34,15H38W123Z1:hello world[AG]".to_owned()
10 };
11 println!("Parsing '{}':", packet);
12
13 let mut parser = Rdp::new(StringInput::new(&packet));
14
15 match parser.packet() {
16 true => println!("Parsed OK:"),
17 false => {
18 let (expected, position) = parser.expected();
19
20 println!("Failure at input position {}", position);
21 println!("\n{}", packet);
22 for _ in 0..position { print!(" "); }
23 println!("^");
24
25 println!("Expected one of:");
26 println!("{:?}", expected);
27
28 let err = ParserError::from_parser(&mut parser);
29 println!("Error: {:?}", err);
30
31 panic!("Cannot proceed");
32 }
33 };
34
35 let mut indent = 0;
36 let mut parents = vec![&parser.queue()[0]];
37 let mut prev_t = parents[0];
38
39 for t in parser.queue() {
40 if t.start >= prev_t.start && t.end <= prev_t.end {
41 indent += 1;
42 parents.push(prev_t);
43 } else {
44 while t.start >= parents.last().unwrap().end {
45 parents.pop();
46 indent -= 1;
47 }
48 }
49 for _ in 0..(indent-1) {
50 print!(" ");
51 }
52 println!("{:?} {}-{}", t.rule, t.start, t.end);
53 prev_t = t;
54 }
55 println!("");
56
57 println!("{:?}", parser.parse());
58}
Trait Implementations§
Source§impl Debug for ParserError
impl Debug for ParserError
Source§impl Display for ParserError
impl Display for ParserError
Source§impl Error for ParserError
impl Error for ParserError
Source§fn description(&self) -> &str
fn description(&self) -> &str
👎Deprecated since 1.42.0: use the Display impl or to_string()
Source§fn cause(&self) -> Option<&dyn Error>
fn cause(&self) -> Option<&dyn Error>
👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
Auto Trait Implementations§
impl Freeze for ParserError
impl RefUnwindSafe for ParserError
impl Send for ParserError
impl Sync for ParserError
impl Unpin for ParserError
impl UnwindSafe for ParserError
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more