Skip to main content

compact

Macro compact 

Source
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::Mappreserve_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);