19个不稳定版本 (8个有破坏性的更新)
0.8.4 | 2024年3月27日 |
---|---|
0.8.1 | 2024年1月2日 |
0.8.0 | 2023年12月21日 |
0.7.3 | 2023年7月24日 |
0.0.1 | 2022年7月1日 |
#77 in 过程宏
8,321 个月下载量
在 35 个crate中使用(通过 pwd-grp)
74KB
541 行
derive-adhoc:某些过程宏的便捷替代品
derive-adhoc
允许你编写由Rust数据结构驱动的宏,就像过程宏 derive 宏一样,但无需与过程宏系统纠缠。
维护 - 此crate的状态
这个库已被重命名为 derive-deftly
,它有一些显著的改进。
当方便时,我们建议用户升级到该crate。此crate,derive-adhoc
,将获得重要的错误修复,但不会添加新功能等。
所有内容都已重命名,并且还有其他破坏性更改;有关如何升级的信息,请参阅 derive-deftly的变更日志。
截至 derive-deftly 0.10.0,模板语法没有破坏性更改。
概述
你可以编写一个临时的模板,它可以讨论数据结构中的字段和类型。你还可以定义命名模板并将它们应用于多个结构:实际上,你可以定义自己的 derive 宏。
你 不需要 创建单独的过程宏 crate,也不需要编写到 syn
和 proc_macro
API。要正确传播编译错误,或者,一般而言,执行使编写过程宏变得如此复杂的事情。
模板语言类似于 macro_rules
宏的“展开”部分,但你不需要编写“匹配器”部分:derive-adhoc 为你解析输入数据结构,并通过预定义的展开变量提供片段。
更多文档可在 doc_
模块和各个过程宏的文档中找到。
简单示例 - 提供包含枚举变体名称的 Vec
use derive_adhoc::{define_derive_adhoc, Adhoc};
define_derive_adhoc! {
ListVariants =
impl $ttype {
fn list_variants() -> Vec<&'static str> {
vec![ $( stringify!( $vname ) , ) ]
}
}
}
#[derive(Adhoc)]
#[derive_adhoc(ListVariants)]
enum Enum {
UnitVariant,
StructVariant { a: u8, b: u16 },
TupleVariant(u8, u16),
}
assert_eq!(
Enum::list_variants(),
["UnitVariant", "StructVariant", "TupleVariant"],
);
下一步
为什么不看看我们的友好介绍呢?
它将引导你了解 derive-adhoc 的最重要的功能,并提供一些示例。
依赖项
~2.6–3.5MB
~68K SLoC