pub struct Rdp<T> { /* private fields */ }Implementations§
Source§impl<'input, T: Input<'input>> Rdp<T>
impl<'input, T: Input<'input>> Rdp<T>
Sourcepub fn new(input: T) -> Rdp<T>
pub fn new(input: T) -> Rdp<T>
Examples found in repository?
examples/cli.rs (line 13)
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}pub fn whitespace(&mut self) -> bool
pub fn any(&mut self) -> bool
pub fn soi(&mut self) -> bool
pub fn eoi(&mut self) -> bool
pub fn digit(&mut self) -> bool
pub fn integer(&mut self) -> bool
pub fn decimal(&mut self) -> bool
pub fn lowercase_letter(&mut self) -> bool
pub fn uppercase_letter(&mut self) -> bool
pub fn letter(&mut self) -> bool
pub fn symbol(&mut self) -> bool
pub fn repeat(&mut self) -> bool
pub fn sequence(&mut self) -> bool
pub fn decimal_list(&mut self) -> bool
pub fn voltage(&mut self) -> bool
pub fn current(&mut self) -> bool
pub fn temperature(&mut self) -> bool
pub fn humidity(&mut self) -> bool
pub fn pressure(&mut self) -> bool
pub fn custom(&mut self) -> bool
pub fn sun(&mut self) -> bool
pub fn rssi(&mut self) -> bool
pub fn count(&mut self) -> bool
pub fn windspeed(&mut self) -> bool
pub fn location(&mut self) -> bool
pub fn zombie_mode(&mut self) -> bool
pub fn zombie(&mut self) -> bool
pub fn data_field(&mut self) -> bool
pub fn data(&mut self) -> bool
pub fn comment_content(&mut self) -> bool
pub fn comment(&mut self) -> bool
pub fn node_name_content(&mut self) -> bool
pub fn node_name(&mut self) -> bool
pub fn path(&mut self) -> bool
Sourcepub fn packet(&mut self) -> bool
pub fn packet(&mut self) -> bool
Examples found in repository?
examples/cli.rs (line 15)
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}pub fn try<F>(&mut self, revert: bool, rule: F) -> bool
pub fn prec_climb<F, G>( &mut self, pos: usize, left: usize, min_prec: u8, last_op: Option<(Option<Rule>, u8, bool)>, primary: &mut F, climb: &mut G, ) -> (Option<(Option<Rule>, u8, bool)>, Option<usize>)
pub fn _repeat(&self) -> u8
pub fn _sequence(&self) -> char
pub fn _location(&self) -> Location
pub fn _windspeed(&self) -> WindSpeed
pub fn _decimal_list(&self) -> Vec<f32>
pub fn _zombie(&self) -> u8
pub fn _datafield(&self) -> DataField
pub fn _data(&self) -> Vec<DataField>
pub fn _comment(&self) -> Option<String>
pub fn _node_name(&self) -> String
pub fn _path(&self) -> Vec<String>
Sourcepub fn parse(&self) -> Packet
pub fn parse(&self) -> Packet
Examples found in repository?
examples/cli.rs (line 57)
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<'input, T: Input<'input>> Parser<'input, T> for Rdp<T>
impl<'input, T: Input<'input>> Parser<'input, T> for Rdp<T>
type Rule = Rule
type Token = Token<Rule>
fn input(&self) -> &T
fn input_mut(&mut self) -> &mut T
Source§fn eoi_matched(&self) -> bool
fn eoi_matched(&self) -> bool
Returns whether a
Parser has matched end-of-input.Source§fn queue_mut(&mut self) -> &mut Vec<Token<Rule>>
fn queue_mut(&mut self) -> &mut Vec<Token<Rule>>
Returns the mutable queue of all matched
Tokens.Source§fn queue_with_captures(&self) -> Vec<(Token<Rule>, String)>
fn queue_with_captures(&self) -> Vec<(Token<Rule>, String)>
Returns the queue of all matched
(Token, value)s.Source§fn queue_index(&self) -> usize
fn queue_index(&self) -> usize
Returns the current index within the queue. Used in
process!.Source§fn inc_queue_index(&self)
fn inc_queue_index(&self)
Increments the current index within the queue. Used in
process!.Source§fn set_queue_index(&self, index: usize)
fn set_queue_index(&self, index: usize)
Set the current index within the queue. Used in
process!.Source§fn set_atomic(&mut self, value: bool)
fn set_atomic(&mut self, value: bool)
Sets a
Parser to atomic rule mode, barring comment & white-space skipping.Source§fn track(&mut self, failed: Rule, pos: usize)
fn track(&mut self, failed: Rule, pos: usize)
Keeps track of rule failures. It gets called when a
Rule fails at pos.Source§fn tracked_len_pos(&self) -> (usize, usize)
fn tracked_len_pos(&self) -> (usize, usize)
Returns the length of the tracked
Rules.Auto Trait Implementations§
impl<T> !Freeze for Rdp<T>
impl<T> !RefUnwindSafe for Rdp<T>
impl<T> Send for Rdp<T>where
T: Send,
impl<T> !Sync for Rdp<T>
impl<T> Unpin for Rdp<T>where
T: Unpin,
impl<T> UnwindSafe for Rdp<T>where
T: UnwindSafe,
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