rabe 0.4.2

ABE Schemes implemented in rust.
Documentation
use utils::policy::pest::{PolicyValue, PolicyType};
use pest::iterators::Pair;

#[derive(Parser)]
#[grammar = "json.policy.pest"]
pub(crate) struct JSONPolicyParser;

pub(crate) fn parse(pair: Pair<Rule>) -> PolicyValue {
    match pair.as_rule() {
        Rule::string => {
            let p = pair.into_inner().next().unwrap();
            PolicyValue::String((p.as_str(), p.line_col().1))
        },
        Rule::number => {
            let p = pair.into_inner().next().unwrap();
            PolicyValue::String((p.as_str(), p.line_col().1))
        },
        Rule::and => {
            let mut vec = Vec::new();
            for child in pair.into_inner() {
                vec.push(parse(child, ));
            }
            PolicyValue::Object((PolicyType::And, Box::new(PolicyValue::Array(vec))))
        },
        Rule::or => {
            let mut vec = Vec::new();
            for child in pair.into_inner() {
                vec.push(parse(child, ));
            }
            PolicyValue::Object((PolicyType::Or, Box::new(PolicyValue::Array(vec))))
        },
        Rule::content
        | Rule::EOI
        | Rule::inner
        | Rule::orinner
        | Rule::andinner
        | Rule::node
        | Rule::value
        | Rule::andvalue
        | Rule::orvalue
        | Rule::char
        | Rule::NAME
        | Rule::CHILDREN
        | Rule::COMMENT
        | Rule::QUOTE
        | Rule::WHITESPACE => unreachable!(),
    }
}