При использовании шаблона 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()
}