#model #field #sub #marco #generate #proc #mapping

子模型

一个用于轻松生成子模型的过程宏

3个不稳定版本

0.2.0 2022年8月11日
0.1.1 2022年4月13日
0.1.0 2022年4月13日

#1056过程宏

每月 37 次下载

MIT 协议

56KB
1.5K SLoC

子模型

项目尚未完成

进度

  • 从宏输入中加载必要的子模型信息
  • 生成代码
  • 字段类型映射
  • 额外的子模型字段
  • 支持 Generic
  • 条件字段类型映射
  • 在子模型上添加额外 proc_marco 的更好方式

用法

使用 allnone 定义子模型类型

  • all 默认所有字段都是子模型的一部分
  • none 默认为空结构体

allnone

  • 如果只需要定义子模型名称,可以使用如下方式
#[sub_model(all("foo"),none("foo2"))]
  • 或者使用完整模式 name = "foo"

可以定义一组信息

  • vis 子模型的可见性,默认 pub
  • name 子模型的名称
  • extra_field 子模型的额外字段,可以使用如下方式
    • ty 定义额外字段的类型
    • from 定义如何创建此字段中的值,它接受一个无参数函数的路径
#[all(
    name = "foo",
    extra_field(
        foo(ty = "bool", from = "Default::default")
))]

示例:向子模型 foo 添加一个名为 foo 的新字段,类型为 bool,由 Default::default 创建

  • extra 添加到此新子模型的其他宏,例如
#[all(
    name = "foo",
    extra(
        derive(Debug, Serialize, Deserialize)
))]

示例使子模型 foo 可以进行 序列化反序列化

依赖项

~2MB
~42K SLoC