17 个版本 (5 个重大更新)
0.14.2 | 2024年7月17日 |
---|---|
0.14.0 | 2024年6月27日 |
0.10.1 | 2024年3月29日 |
#49 在 过程宏
每月11,438 次下载
用于 36 个crate (15 个直接使用)
115KB
792 行
derive-deftly:一些过程宏的便捷替代方案
derive-deftly
允许你编写由Rust数据结构驱动的宏,就像过程宏 derive 宏一样,但无需与过程宏系统纠缠。
稳定性警告
我们打算很快发布这个crate的1.x版本。我们认为我们已经做出了所有必要的重大更新,但我们可能错了。
这是 derive-adhoc
的替代品。我们建议现有的 derive-adhoc
用户在方便的时候升级到 derive-deftly
。
概述
你可以编写一个临时模板,它可以讨论数据结构中的字段和类型。你也可以定义命名模板并将它们应用于多个结构:实际上,你可以定义自己的 derive 宏。
你 不需要 创建一个单独的过程宏crate,写入 syn
和 proc_macro
API。注意适当地传播编译错误,或者,通常,执行使编写过程宏变得如此复杂的所有事情。
模板语言类似于宏 macro_rules
的“展开”部分,但你不需要编写“匹配器”部分:derive-deftly 为你解析输入数据结构,并通过预定义的展开变量提供这些部分。
更详细的文档可以在 doc_
模块中找到,以及各个过程宏的文档中。
简单示例 - 提供包含枚举变体名称的 Vec
use derive_deftly::{define_derive_deftly, Deftly};
define_derive_deftly! {
ListVariants:
impl $ttype {
fn list_variants() -> Vec<&'static str> {
vec![ $( stringify!( $vname ) , ) ]
}
}
}
#[derive(Deftly)]
#[derive_deftly(ListVariants)]
enum Enum {
UnitVariant,
StructVariant { a: u8, b: u16 },
TupleVariant(u8, u16),
}
assert_eq!(
Enum::list_variants(),
["UnitVariant", "StructVariant", "TupleVariant"],
);
下一步
为什么不看看我们友好的 用户指南 呢?
它将引导你了解 derive-deftly 最重要的功能,并提供多个实例。
依赖项
~2.6–3.5MB
~67K SLoC