postfix_log_parser/formatters/json/
common.rs1use serde_json;
2
3pub 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
8pub 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
13pub 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
18pub 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
27pub 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
38pub 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
52pub 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}