Skip to main content

rswappalyzer_engine/core/
basic_info.rs

1use serde::{Deserialize, Serialize};
2
3/// 分类规则定义(通用,多源解析后统一结构)
4#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)]
5pub struct CategoryRule {
6    #[serde(default)]
7    pub name: String,
8    #[serde(default)]
9    pub priority: Option<u32>,
10    #[serde(default)]
11    pub id: u32,
12}
13
14/// 技术基础信息,仅存储描述/分类等元信息,无匹配规则
15#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq)]
16pub struct TechBasicInfo {
17    pub tech_name: Option<String>,
18    pub category_ids: Vec<u32>,
19    #[serde(default)]
20    pub implies: Option<Vec<String>>,
21
22    // 非规则必须字段 - 特性开关控制
23    #[cfg(feature = "full-meta")]
24    pub cpe: Option<String>,
25    #[cfg(feature = "full-meta")]
26    pub description: Option<String>,
27    #[cfg(feature = "full-meta")]
28    pub website: Option<String>,
29    #[cfg(feature = "full-meta")]
30    pub icon: Option<String>,
31    #[cfg(feature = "full-meta")]
32    pub saas: Option<bool>,
33    #[cfg(feature = "full-meta")]
34    pub pricing: Option<Vec<String>>,
35}
36
37#[derive(Debug, Clone, Serialize, Deserialize)]
38pub struct CategoryEntry {
39    #[serde(default)] // 缺groups → 空数组 []
40    pub groups: Vec<u32>,
41    pub name: String,
42    #[serde(default)]
43    pub priority: u8,
44}