Я пытаюсь реализовать пользовательские макросы для своих черт, и они действительно работают!
Однако у меня небольшая проблема. Я не могу найти способ включить универсальные параметры в черту.
В частности, я хочу сделать что-то вроде этого: #[derive(MyCustomDerive<'a, B, C>)]
Вместо этого, сейчас я жестко программирую дженерики, вот так:
let gen = quote! {
impl #impl_generics Graph<'a, V, E> for #name #ty_generics #where_clause {
fn Map(&self) -> &MAP<V, E> {
&self.map
}
...
}
Как видите, я включаю 'a , V и E , зафиксированные в блоке кавычек, вместо того, что я хочу достичь, что возможность гибко выводить черту с помощью универсальных типов, которые я хочу.
Что бы я хотел, это что-то вроде этого:
#[derive(MyCustomDerive<'a, B, C>)]
чтобы получить что-то эквивалентное этому
let gen = quote! {
impl #impl_generics Graph<'a, B, C> for #name #ty_generics #where_clause {
fn Map(&self) -> &MAP<B, C> {
&self.map
}
...
}
Это позволило бы мне зарезервировать (конечно, если необходимо) V и E для других вещей и, на мой взгляд, сделать код более управляемым.
Спасибо за вашу помощь!
Обновление 1:
Вот так выглядит моя производная функция
pub fn derive(ast: &syn::DeriveInput) -> TokenStream {
let name = &ast.ident;
let generics = &ast.generics;
let (impl_generics, ty_generics, where_clause) = generics.split_for_impl();
let gen = quote! {
impl #impl_generics Graph<'a, V, E> for #name #ty_generics #where_clause {
fn Map(&self) -> &MAP<V, E> {
&self.map
} ...