Есть ли способ для псевдонима множественных производных как одного? - PullRequest
6 голосов
/ 04 июня 2019

При использовании шаблона newtype у меня часто бывают длинные производные:

extern crate derive_more;
use derive_more::*;

#[derive(Add, Sub, Mul, Div, ..., Copy, Clone, Debug, Eq, PartialEq, Hash, Ord, PartialOrd)]
struct Foo(i32);

Есть ли способ сократить это до чего-то подобного:

#[derive(Num)]
struct Foo(i32);

Где Num является производным макросом?

Я нашел это , но кажется, что нельзя расширять макросы в атрибутах. Этот ответ обсуждает, как атрибуты должны быть прикреплены к элементам, исключая это:

#[proc_macro_derive(Num)]
pub fn num_derive(_: TokenStream) -> TokenStream {
    let gen = quote! {
        #[derive(Add, Sub, Mul, Div, ..., Copy, Clone, Debug, Eq, PartialEq, Hash, Ord, PartialOrd)]
    };
    gen.into()
}
...