1pub mod enums {
6 #[derive(Debug, PartialEq)]
7 pub enum LineType {
8 Assignment,
9 Comment,
10 Conditional,
11 Rule,
12 WhiteSpace,
13 }
14
15 #[derive(Debug, Hash, PartialEq, Eq, Clone)]
16 pub enum OpCode {
17 Require,
18 RequireNot,
19 In,
20 NotIn,
21 LessThan,
22 LessThanOrEqualTo,
23 GreaterThan,
24 GreaterThanOrEqualTo,
25 }
26
27 #[derive(Debug, Hash, PartialEq, Eq, Clone)]
28 pub enum RValueType {
29 Value,
30 List,
31 Regex,
32 Variable,
33 }
34 #[derive(Debug, Clone, Eq, PartialEq, Hash)]
35 pub enum CompoundType {
36 OR,
37 AND,
38 }
39
40 #[derive(Debug, Clone, Eq, PartialEq, Hash)]
41 pub enum RuleType {
42 CompoundRule(super::structs::CompoundRule),
43 ConditionalRule(super::structs::ConditionalRule),
44 SimpleRule(super::structs::Rule), }
47}
48
49pub mod structs {
50 use std::collections::HashMap;
51
52 #[derive(Debug, Hash, Eq, PartialEq, Clone)]
53 pub struct Rule {
54 pub(crate) resource_type: String,
55 pub(crate) field: String,
56 pub(crate) operation: super::enums::OpCode,
57 pub(crate) value: String,
58 pub(crate) rule_vtype: super::enums::RValueType,
59 pub(crate) custom_msg: Option<String>,
60 }
61
62 #[derive(Debug, Clone, Eq, PartialEq, Hash)]
63 pub struct CompoundRule {
64 pub(crate) compound_type: super::enums::CompoundType,
65 pub(crate) raw_rule: String,
66 pub(crate) rule_list: Vec<super::enums::RuleType>,
67 }
68
69 #[derive(Debug, Clone, Eq, PartialEq, Hash)]
70 pub struct ConditionalRule {
71 pub(crate) condition: CompoundRule,
72 pub(crate) consequent: CompoundRule,
73 }
74
75 #[derive(Debug)]
76 pub struct ParsedRuleSet {
77 pub(crate) variables: HashMap<String, String>,
78 pub(crate) rule_set: Vec<super::enums::RuleType>,
79 }
80}