fapolicy_rules/parser/
legacy.rs

1/*
2 * Copyright Concurrent Technologies Corporation 2021
3 *
4 * This Source Code Form is subject to the terms of the Mozilla Public
5 * License, v. 2.0. If a copy of the MPL was not distributed with this
6 * file, You can obtain one at https://mozilla.org/MPL/2.0/.
7 */
8
9use nom::bytes::complete::{is_not, take_until};
10use nom::bytes::streaming::tag;
11use nom::character::complete::space0;
12use nom::combinator::rest;
13use nom::error::ErrorKind;
14use nom::sequence::tuple;
15use nom::Err;
16
17use crate::parser;
18use crate::parser::parse::{StrTrace, TraceError};
19use crate::{Decision, Object, Permission, Subject};
20
21// provide legacy api to the new parsers
22
23pub fn decision(i: &str) -> nom::IResult<&str, Decision> {
24    match parser::decision::parse(StrTrace::new(i)) {
25        Ok((r, d)) => Ok((r.current, d)),
26        Err(_) => Err(nom::Err::Error(nom::error::Error {
27            input: i,
28            code: ErrorKind::CrLf,
29        })),
30    }
31}
32pub fn permission(i: &str) -> nom::IResult<&str, Permission> {
33    match parser::permission::parse(StrTrace::new(i)) {
34        Ok((r, p)) => Ok((r.current, p)),
35        Err(_) => Err(nom::Err::Error(nom::error::Error {
36            input: i,
37            code: ErrorKind::CrLf,
38        })),
39    }
40}
41pub fn subject(i: &str) -> nom::IResult<&str, Subject> {
42    let (r, ss) = take_until(" :")(StrTrace::new(i)).map_err(|_: Err<TraceError>| {
43        nom::Err::Error(nom::error::Error {
44            input: i,
45            code: ErrorKind::Alpha,
46        })
47    })?;
48    match parser::subject::parse(ss) {
49        Ok((_, s)) => Ok((r.current, s)),
50        Err(e) => {
51            println!("{:?}", e);
52            Err(nom::Err::Error(nom::error::Error {
53                input: i,
54                code: ErrorKind::Alpha,
55            }))
56        }
57    }
58}
59pub fn object(i: &str) -> nom::IResult<&str, Object> {
60    let (_, (_, _, _, oo)) = tuple((is_not(":"), tag(":"), space0, rest))(StrTrace::new(i))
61        .map_err(|_: Err<TraceError>| {
62            nom::Err::Error(nom::error::Error {
63                input: i,
64                code: ErrorKind::Alpha,
65            })
66        })?;
67
68    match parser::object::parse(oo) {
69        Ok((r, o)) => Ok((r.current, o)),
70        Err(_) => Err(nom::Err::Error(nom::error::Error {
71            input: i,
72            code: ErrorKind::Alt,
73        })),
74    }
75}