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 {
    /// Parse a template string into a `Template`
    #[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())
    }

    /// Parses an expression string into a `Template`
    #[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())
    }
}