1 个不稳定版本
0.1.0 | 2020年5月2日 |
---|
在 #named 中排名第 64
11KB
164 行(不含注释)
macro!macro!
Rust 宏模板库,用于编写更简洁的代码。
用法
使用宏声明带有你想要使用的名称模板。模板对某些项目进行了特殊处理
__
: 一个双下划线可以用作名称通配符,或用于前缀和/或后缀匹配!
: 用于类型通配符
示例
结构体和字段名称的名称前缀匹配
macro_template!(prefix_match = {
#...
struct STRUCT_PREFIX__ {
#... FIELD_PREFIX__: !,
}
});
字段宏的类型匹配
macro_template!(field_type_match = {
struct __ {
#... __: i32,
}
});
这将向类型为 i32
的结构体中的任何字段添加声明的属性宏。
serde 注解宏的完整示例
use macro_macro::*;
use serde::{Deserialize, Serialize};
macro_template!(serde_service_model = {
#[derive(Default, Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
struct __ {
#[serde(skip_serializing_if = "Option::is_none")] __: Option<!>,
}
});
#[macro_macro(serde_service_model)]
pub struct Service {
pub version: String,
pub metadata: Option<Metadata>,
...
}
#[macro_macro(serde_service_model)]
pub struct Metadata {
pub api_version: Option<String>,
pub endpoint_prefix: Option<String>,
...
}
相当于直接在每个结构体上标注
#[derive(Default, Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
以及每个类型为 Option
的字段上标注
#[serde(skip_serializing_if = "Option::is_none")]
许可证
许可下
- MIT 许可证 (LICENSE 或 http://opensource.org/licenses/MIT)
贡献
除非你明确说明,否则你有意提交以包含在作品中的任何贡献,都应按照上述方式许可,不附加任何额外条款或条件。
依赖项
~1.5MB
~35K SLoC