cfn_guard/
guard_types.rs

1// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2// SPDX-License-Identifier: Apache-2.0
3// Structs, Enums and Impls
4
5pub 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), // SimpleRule is a rule that cannot be reduced/transformed any further
45                                          // It's the base case for recursing into rule processing
46    }
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}