17 个版本 (5 个重大更新)

0.14.2 2024年7月17日
0.14.0 2024年6月27日
0.10.1 2024年3月29日

#49过程宏

Download history 1037/week @ 2024-05-02 1431/week @ 2024-05-09 1561/week @ 2024-05-16 1580/week @ 2024-05-23 1896/week @ 2024-05-30 1181/week @ 2024-06-06 2654/week @ 2024-06-13 3759/week @ 2024-06-20 3046/week @ 2024-06-27 2016/week @ 2024-07-04 1945/week @ 2024-07-11 2243/week @ 2024-07-18 2456/week @ 2024-07-25 3638/week @ 2024-08-01 2782/week @ 2024-08-08 2177/week @ 2024-08-15

每月11,438 次下载
用于 36 个crate (15 个直接使用)

MIT 许可证

115KB
792

derive-deftly:一些过程宏的便捷替代方案

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

稳定性警告

我们打算很快发布这个crate的1.x版本。我们认为我们已经做出了所有必要的重大更新,但我们可能错了。

这是 derive-adhoc 的替代品。我们建议现有的 derive-adhoc 用户在方便的时候升级到 derive-deftly

概述

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

不需要 创建一个单独的过程宏crate,写入 synproc_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