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
mod rules;
mod tree;
use crate::*;
use pest::Parser;
use pest_derive::*;
use std::collections::BTreeMap;
use std::mem::replace;
use tree::ParseTree;
#[derive(Parser)]
#[grammar = "templar.pest"]
struct TemplarParser;
impl Templar {
#[inline]
pub fn parse_template(&self, input: &str) -> Result<Template> {
let result: Node = self.parse_match(
TemplarParser::parse(Rule::template_root, input)
.map_err(|e| TemplarError::ParseFailure(format!("{}", e)))?,
)?;
Ok(result.set_operation(Operations::Concat).into())
}
#[inline]
pub fn parse_expression(&self, input: &str) -> Result<Template> {
Ok(self
.parse_match(
TemplarParser::parse(Rule::expression, input.trim())
.map_err(|e| TemplarError::ParseFailure(format!("{}", e)))?,
)?
.into())
}
}