#macro #default #constructor

no-std default-constructor

通过默认构造和字段转换创建伪 DSL 的宏

9 个不稳定版本 (3 个破坏性更新)

0.4.2 2024 年 7 月 30 日
0.4.1 2024 年 7 月 30 日
0.3.0 2024 年 6 月 8 日
0.2.1 2024 年 4 月 24 日
0.1.3 2024 年 4 月 18 日

#525 in Rust 模式

Download history 359/week @ 2024-04-17 123/week @ 2024-04-24 5/week @ 2024-05-01 2/week @ 2024-05-29 157/week @ 2024-06-05 12/week @ 2024-06-12 3/week @ 2024-06-19 17/week @ 2024-06-26 3/week @ 2024-07-03 173/week @ 2024-07-24 172/week @ 2024-07-31

每月 345 次下载
用于 bevy_spawn_fn

MIT/Apache

10KB
116

default-constructor

创建伪 DSL 的宏,通过默认构造和字段转换来构建结构体。

动机

这个 crate 主要设计用于 bevy,其中使用 ..Default::default() 构造大型捆绑包是常见的。

语法

使用 construct!,它使用 Into

construct! {
    Student {
        name: "Timmy",
        age: 10,
        father: Parent {
            name: "Tommy",
            age: 42
        }
    }
}

这将扩展为

Student {
    name: Into::into("Timmy"),
    age: Into::into(10),
    father: construct! {
        Parent {
            name: "Tommy",
            age: 42
        }
    }
    ..Default::default()
}

如果不需要递归在嵌套结构声明上,请将嵌套结构用括号括起来。

construct! {
    Student {
        name: "Timmy",
        age: 10,
        father: { Parent {
            name: "Tommy",
            age: 42
        }}
    }
}

元组构造

要创建元组,使用逗号连接多个结构体。

construct! {
    Student {
        name: "Timmy",
        age: 10,
    },
    Son::<2> {
        of: "Tommy"
    },
    Age(16),
}

元构造宏

元构造宏允许您定义具有自定义配置的宏。

有关 meta_default_constructor! 的详细信息,请参阅文档。

InferInto

InferInto 允许用户绕过孤儿规则来创建转换。

默认情况下,我们为所有数字类型提供 i32(整数字面量)和 i64 -> f64,除了标准的 FromInto

如果找到多个转换路径,则转换将失败,从而失败 infer_construct 宏。

更改日志

  • 0.4
    • meta_default_constructor 不再接受导入列表作为第一个参数。
    • meta_default_constructor 现在可以通过逗号连接来创建元组。

许可

在以下任一许可下:

Apache 许可证第 2 版 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0) MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT),由您选择。

贡献

欢迎贡献!

除非您明确表示,否则任何有意提交以包含在您的工作中的贡献(根据 Apache-2.0 许可证定义),都应按上述方式双重许可,而无需任何额外条款或条件。

依赖关系

~140KB