1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#[macro_export]
macro_rules! impl_passive_checks{
    ( $( ($check:ident,$check_func:ident,$name:literal,$desc:literal )),* ) => {
        #[derive(Debug, Clone, Serialize, Deserialize, PartialEq,Eq, EnumIter)]
        pub enum PassiveChecks{
            $(
                $check(Vec<Alert>),
            )*
        }
        impl PassiveChecks{
            pub fn from_string(string:&str)->Option<Self>{
                match string{
                    $(
                        $name=>Some(PassiveChecks::$check(vec![])),
                    )*
                    _=>None,
                }
            }
            pub fn description(&self)->&'static str{
                match &self{
                    $(
                        PassiveChecks::$check(_)=>$desc,
                    )*
                }
            }
            pub fn name(&self)->&'static str{
                match &self{
                    $(
                        PassiveChecks::$check(_)=>$name,
                    )*
                }
            }
            pub fn inner(&self)->Vec<Alert>{
                match &self{
                    $(
                        PassiveChecks::$check(i)=>i.to_vec(),
                    )*
                }
            }

        }
        impl <T:OAS+Serialize>PassiveSwaggerScan<T>{
            pub fn run_check(&self,check:PassiveChecks)->PassiveChecks{
                match check{
                    $(
                        PassiveChecks::$check(_)=>PassiveChecks::$check(self.$check_func()),
                    )*
                }
            }
        }
    }
}

#[macro_export]
macro_rules! impl_active_checks{
    ( $( ($check:ident,$check_func:ident,$response_func:ident,$name:literal,$desc:literal )),* ) => {
        #[derive(Debug, Clone, Serialize, Deserialize, PartialEq,Eq, EnumIter)]
        pub enum ActiveChecks{
            $(
                $check((Vec<Alert>,AttackLog)),
            )*
        }
        impl ActiveChecks{
            pub fn description(&self)->&'static str{
                match &self{
                    $(
                        ActiveChecks::$check(_)=>$desc,
                    )*
                }
            }
            pub fn from_string(str1:&str)->Option<Self>{
                match str1{
                    $(
                        $name=>Some(ActiveChecks::$check((vec![],AttackLog::default()))),
                    )*
                    _=>None,
                }
            }
            pub fn name(&self)->&'static str{
                match &self{
                    $(
                        ActiveChecks::$check(_)=>$name,
                    )*
                }
            }
            pub fn inner(&self)->Vec<Alert>{
                match &self{
                    $(
                        ActiveChecks::$check(i)=>i.0.to_vec(),
                    )*
                }
            }
        }
        impl <T:OAS+Serialize>ActiveScan<T>{
            pub async fn run_check(&self,check:ActiveChecks,auth:&Authorization)->ActiveChecks{
                match check{
                    $(
                        ActiveChecks::$check(_)=>ActiveChecks::$check(Self::$response_func(self.$check_func(auth).await)),
                    )*
                }
            }
        }
    }
}