postfix_log_parser/formatters/json/
common.rs

1use serde_json;
2
3/// 将可选的u32值转换为JSON数值
4pub fn optional_u32_to_json(value: &Option<u32>) -> Option<serde_json::Value> {
5    value.map(|v| serde_json::Value::Number(serde_json::Number::from(v)))
6}
7
8/// 将可选的u64值转换为JSON数值
9pub fn optional_u64_to_json(value: &Option<u64>) -> Option<serde_json::Value> {
10    value.map(|v| serde_json::Value::Number(serde_json::Number::from(v)))
11}
12
13/// 将可选的字符串转换为JSON字符串
14pub fn optional_string_to_json(value: &Option<String>) -> Option<serde_json::Value> {
15    value.as_ref().map(|s| serde_json::Value::String(s.clone()))
16}
17
18/// 将字符串向量转换为JSON数组
19pub fn string_vec_to_json(vec: &[String]) -> serde_json::Value {
20    let json_array: Vec<serde_json::Value> = vec
21        .iter()
22        .map(|s| serde_json::Value::String(s.clone()))
23        .collect();
24    serde_json::Value::Array(json_array)
25}
26
27/// 为事件数据插入可选字段
28pub fn insert_optional_field(
29    map: &mut serde_json::Map<String, serde_json::Value>,
30    key: &str,
31    value: &Option<String>,
32) {
33    if let Some(val) = value {
34        map.insert(key.to_string(), serde_json::Value::String(val.clone()));
35    }
36}
37
38/// 为事件数据插入可选数值字段
39pub fn insert_optional_number_field(
40    map: &mut serde_json::Map<String, serde_json::Value>,
41    key: &str,
42    value: &Option<u32>,
43) {
44    if let Some(val) = value {
45        map.insert(
46            key.to_string(),
47            serde_json::Value::Number(serde_json::Number::from(*val)),
48        );
49    }
50}
51
52/// 添加故障排除信息
53pub fn add_troubleshooting_info(
54    map: &mut serde_json::Map<String, serde_json::Value>,
55    context: &str,
56) {
57    let troubleshooting = serde_json::json!({
58        "context": context,
59        "suggestions": [
60            "检查网络连接",
61            "验证配置文件",
62            "查看系统日志",
63            "检查资源使用情况"
64        ],
65        "documentation": "https://www.postfix.org/documentation.html"
66    });
67
68    map.insert("troubleshooting".to_string(), troubleshooting);
69}