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 过程宏

Download history 3368/week @ 2024-04-08 1325/week @ 2024-04-15 1787/week @ 2024-04-22 2484/week @ 2024-04-29 1844/week @ 2024-05-06 1953/week @ 2024-05-13 1662/week @ 2024-05-20 1255/week @ 2024-05-27 1630/week @ 2024-06-03 1761/week @ 2024-06-10 2163/week @ 2024-06-17 2602/week @ 2024-06-24 1540/week @ 2024-07-01 1972/week @ 2024-07-08 2069/week @ 2024-07-15 2416/week @ 2024-07-22

8,321 个月下载量
35 个crate中使用(通过 pwd-grp

MIT 许可证

74KB
541

derive-adhoc:某些过程宏的便捷替代品

derive-adhoc 允许你编写由Rust数据结构驱动的宏,就像过程宏 derive 宏一样,但无需与过程宏系统纠缠。

维护 - 此crate的状态

这个库已被重命名为 derive-deftly,它有一些显著的改进。

当方便时,我们建议用户升级到该crate。此crate,derive-adhoc,将获得重要的错误修复,但不会添加新功能等。

所有内容都已重命名,并且还有其他破坏性更改;有关如何升级的信息,请参阅 derive-deftly的变更日志

截至 derive-deftly 0.10.0,模板语法没有破坏性更改。

概述

你可以编写一个临时的模板,它可以讨论数据结构中的字段和类型。你还可以定义命名模板并将它们应用于多个结构:实际上,你可以定义自己的 derive 宏。

不需要 创建单独的过程宏 crate,也不需要编写到 synproc_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