#macro-derive #macro-helpers #macro #proc-macro #helper #create #inclusive

derive-elves

编写包容性 derive 宏很繁琐,这提供了一些辅助函数,使它更容易。

3个版本

0.1.2 2024年3月26日
0.1.1 2023年3月23日
0.1.0 2023年3月3日

#164进程宏

Download history 6/week @ 2024-03-13 196/week @ 2024-03-20 241/week @ 2024-03-27 66/week @ 2024-04-03 39/week @ 2024-04-10 55/week @ 2024-04-17 49/week @ 2024-04-24 43/week @ 2024-05-01 71/week @ 2024-05-08 76/week @ 2024-05-15 117/week @ 2024-05-22 65/week @ 2024-05-29 103/week @ 2024-06-05 99/week @ 2024-06-12 75/week @ 2024-06-19 90/week @ 2024-06-26

每月 下载 378
用于 4 crate(2 直接使用)

MIT 协议

8KB
81

derive-elves

编写包容性 derive 宏很繁琐,这提供了一些辅助函数,使它更容易。

类型感知实现

type_aware_impl 函数使编写考虑底层类型泛型的 derive 宏变得容易。

示例

考虑这个简单的 derive 宏。

#[proc_macro_derive(Append)]
pub fn push(input_stream: TokenStream) -> TokenStream {
    let input_type = parse_macro_input!(input_stream as DeriveInput);

    let ident = &input_type.ident;

    type_aware_impl(
        quote! {
            impl<T: Append<T>> Append<T> for #ident {
                fn append(&self, l: T) {
                    todo!()
                }
            }
        },
        &input_type,
    )
}

下面的注解结构体,

#[derive(Append)]
struct Foo<S: ToString> {
    bar: S
}

将展开为以下内容

struct Foo<S: ToString> {
    bar: S
}

impl<T: Append<T>, S: ToString> Append<T> for Foo<S> {
    fn append(&self, l: T) {
        todo!()
    }
}

上述内容也适用于更复杂的模式,如下所示

impl Trait for & #ident
impl Trait for &mut #ident
impl Trait for [#ident]
impl Trait for (#ident, A, B, C)

许可证:MIT

依赖项

~265–710KB
~17K SLoC