3个稳定版本
3.0.0 | 2021年3月1日 |
---|---|
2.0.0 | 2021年3月1日 |
1.0.0 | 2021年2月25日 |
#50 在 #proc-macro-attributes
20KB
219 行
structype_derive
这是一个 derive 进程宏,允许您为结构体、枚举和联合添加自定义 derive 和属性。此 derive 将在类型上添加两个 impl。`as_string` 方法返回一个具有任何元信息的 json 序列化字符串表示形式,这些元信息由 `structype_meta("key"=val)
` 属性注解,而 `print_fields` 方法将打印相同的内容到 STDOUT。如果在该宏中注解了元组结构体和单元结构体,此宏将在编译时引发 panic。
此 derive 中使用的类型来自 structype crate,可用于反序列化此宏生成的字符串。
示例
use structype_derive::StrucType;
#[derive(StrucType)]
// #[structype_meta("labelover_ride=name")] This will panic the macro
struct UserStruct {
#[structype_meta(override_name="Primary ID", order="1")]
id: i64,
#[structype_meta(override_name="name", order="0")]
username: String,
org: String,
details: Details,
}
#[derive(StrucType)]
struct Details {
user_attributes: std::collections::HashMap<String, String>,
}
fn print_struct_fields() {
UserStruct::print_fields();
let data = UserStruct::as_string();
println!("{}", data);
Details::print_fields();
let data = Details::as_string();
println!("{}", data);
}
上述代码将生成并返回一个 json 序列化字符串表示形式,其中键是结构体的字段名,值是 `HashMap<String, String>
` 的 `structype_meta
` 的键值。如果 `structype_meta
` 缺失,则字段的相关值将是一个空的 `{}
`。
输出
[
{
"field_name": "id",
"meta": {
"order": "1",
"override_name": "Primary ID"
}
},
{
"field_name": "username",
"meta": {
"override_name": "name",
"order": "0"
}
},
{
"field_name": "org",
"meta": {}
},
{
"field_name": "details",
"meta": {}
}
]
依赖项
~0.7–1.4MB
~32K SLoC