3个版本
0.1.2 | 2024年3月26日 |
---|---|
0.1.1 | 2023年3月23日 |
0.1.0 | 2023年3月3日 |
#164 在 进程宏
每月 下载 378 次
用于 4 个 crate(2 直接使用)
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