direct_match_a/
direct_match_a.rs1#![allow(
2 dead_code,
3 irrefutable_let_patterns,
4 unused_variables,
5 unused_imports,
6 unused
7)]
8extern crate pest;
14use pest_tree::ParsingContext;
15use std::rc::Rc;
16
17use pest::*;
18extern crate pest_derive;
19#[macro_use]
20extern crate pest_tree_derive;
21extern crate pest_tree;
22use pest_derive::*;
23use pest_tree::PestTree;
24use pest_tree::TreeError;
25use pest_tree_derive::PestTree;
26
27#[derive(Parser)]
28#[grammar = "../examples/sequential.pest"]
29pub struct DirectParser;
30
31#[derive(PestTree, Debug, PartialEq)]
32#[pest_tree(strategy(Direct))]
33#[pest_tree(require(rule(Rule::a)))]
34struct A {}
35
36fn main() {
37 let test_str = "a";
39 let parsed: iterators::Pair<'_, Rule> = DirectParser::parse(Rule::a, test_str)
40 .unwrap()
41 .next()
42 .unwrap();
43 let ctx = pest_tree::ParsingContext {
44 filename: "testfile.file".to_string(),
45 contents: test_str.to_string(),
46 };
47 let a = A::with_pair(parsed, Rc::new(ctx)).unwrap();
48 assert_eq!(a, A {});
49 let test_str = "b";
51 let parsed = DirectParser::parse(Rule::b, test_str)
52 .unwrap()
53 .next()
54 .unwrap();
55 let ctx = pest_tree::ParsingContext {
56 filename: "wrongfile.bad".to_string(),
57 contents: test_str.to_string(),
58 };
59 let tree_error = A::with_pair(parsed, Rc::new(ctx)).unwrap_err();
60 tree_error.eprint();
62}