Skip to main content

rswappalyzer_engine/core/
enums.rs

1use serde::{Deserialize, Serialize};
2use std::fmt::{Display, Formatter};
3
4/// 匹配作用域枚举,定义所有支持的检测维度
5#[derive(Debug, Clone, Eq, Hash, PartialEq, Serialize, Deserialize)]
6pub enum MatchScope {
7    Url,
8    Html,
9    Js,
10    Script,
11    ScriptSrc,
12    Header,
13    Cookie,
14    Meta,
15}
16
17impl Display for MatchScope {
18    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
19        match self {
20            MatchScope::Url => write!(f, "url"),
21            MatchScope::Html => write!(f, "html"),
22            MatchScope::Js => write!(f, "html"),
23            MatchScope::Script => write!(f, "script"),
24            MatchScope::ScriptSrc => write!(f, "script"),
25            MatchScope::Meta => write!(f, "meta"),
26            MatchScope::Header => write!(f, "header"),
27            MatchScope::Cookie => write!(f, "cookie"),
28        }
29    }
30}
31
32/// 匹配类型枚举,标记每条模式的匹配方式
33#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
34pub enum MatchType {
35    Contains,
36    Regex,
37    Exists, // 存在性检测(仅用于 headers/meta 的空值场景)
38}
39
40impl Default for MatchType {
41    fn default() -> Self {
42        MatchType::Regex
43    }
44}
45
46/// 匹配条件枚举
47#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, Default)]
48#[serde(rename_all = "lowercase")]
49pub enum MatchCondition {
50    And,
51    #[default]
52    Or,
53}
54
55/// 规则证据类型枚举
56/// 用于区分不同类型的匹配规则,适配不同的执行逻辑
57#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
58pub enum EvidenceKind {
59    // /// 基于Token/Literal/Any/Contains的规则(需要证据匹配)
60    // TokenBased,
61    /// 仅检查存在性的规则(Header/Cookie键存在即可,无必现Token)
62    /// 基于Literal/Any/Contains的规则(需要证据匹配)
63    LiteralBased,
64    /// 仅检查存在性的规则(Header/Cookie键存在即可,无必现Token)
65    ExistsOnly,
66    /// 纯正则规则(无必现字面量,仅靠正则匹配)
67    NoLiteral,
68}