use serde_json;
pub fn optional_u32_to_json(value: &Option<u32>) -> Option<serde_json::Value> {
value.map(|v| serde_json::Value::Number(serde_json::Number::from(v)))
}
pub fn optional_u64_to_json(value: &Option<u64>) -> Option<serde_json::Value> {
value.map(|v| serde_json::Value::Number(serde_json::Number::from(v)))
}
pub fn optional_string_to_json(value: &Option<String>) -> Option<serde_json::Value> {
value.as_ref().map(|s| serde_json::Value::String(s.clone()))
}
pub fn string_vec_to_json(vec: &[String]) -> serde_json::Value {
let json_array: Vec<serde_json::Value> = vec
.iter()
.map(|s| serde_json::Value::String(s.clone()))
.collect();
serde_json::Value::Array(json_array)
}
pub fn insert_optional_field(
map: &mut serde_json::Map<String, serde_json::Value>,
key: &str,
value: &Option<String>,
) {
if let Some(val) = value {
map.insert(key.to_string(), serde_json::Value::String(val.clone()));
}
}
pub fn insert_optional_number_field(
map: &mut serde_json::Map<String, serde_json::Value>,
key: &str,
value: &Option<u32>,
) {
if let Some(val) = value {
map.insert(
key.to_string(),
serde_json::Value::Number(serde_json::Number::from(*val)),
);
}
}
pub fn add_troubleshooting_info(
map: &mut serde_json::Map<String, serde_json::Value>,
context: &str,
) {
let troubleshooting = serde_json::json!({
"context": context,
"suggestions": [
"检查网络连接",
"验证配置文件",
"查看系统日志",
"检查资源使用情况"
],
"documentation": "https://www.postfix.org/documentation.html"
});
map.insert("troubleshooting".to_string(), troubleshooting);
}