fapolicy_rules/parser/
legacy.rs1use 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
21pub 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}