#macro-derive #derive #proc-macro #type #macro #attributes #proc-macro-attributes

structype_derive

一个 derive 宏crate,允许您查看允许的类型字段,并允许您覆盖它

3个稳定版本

3.0.0 2021年3月1日
2.0.0 2021年3月1日
1.0.0 2021年2月25日

#50#proc-macro-attributes

MIT 许可证

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