compact!() { /* proc-macro */ }Expand description
compact! 函数式宏 — 对齐 PHP compact()
将变量名 → 值按声明顺序插入 serde_json::Map<String, serde_json::Value>。
详见 sz_rust_macros::compact 文档。
compact! 函数式宏
将变量名 → 值按声明顺序插入 serde_json::Map<String, serde_json::Value>,
严格对齐 PHP compact() 函数行为:
§PHP compact() 行为
$code = 1;
$msg = "ok";
$data = ["id" => 1];
return compact('code', 'msg', 'data');
// 等价于:['code' => 1, 'msg' => "ok", 'data' => ["id" => 1]]§Rust compact! 等价
use sz_rust_macros::compact;
use serde_json::json;
let code = 1i32;
let msg = "ok".to_string();
let data = json!({"id": 1});
let result = compact!(code, msg, data);
assert_eq!(result.len(), 3);
assert_eq!(result["code"], 1);
assert_eq!(result["msg"], "ok");
assert_eq!(result["data"]["id"], 1);§字段顺序
字段顺序严格按宏参数顺序保序(对齐 PHP compact() 参数顺序),
依赖 serde_json::Map 的 preserve_order feature(默认启用)。
§类型转换
使用 serde_json::to_value() 将变量值转换为 serde_json::Value,
支持所有实现 serde::Serialize 的类型。
§示例
use sz_rust_macros::compact;
let name = "alice";
let age = 30i32;
let map = compact!(name, age);
assert_eq!(map["name"], "alice");
assert_eq!(map["age"], 30);