1 个不稳定版本

0.1.0 2020年5月2日

#named 中排名第 64

MIT 许可证

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")]

许可证

许可下

贡献

除非你明确说明,否则你有意提交以包含在作品中的任何贡献,都应按照上述方式许可,不附加任何额外条款或条件。

依赖项

~1.5MB
~35K SLoC