1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
use proc_macro::TokenStream; use quote::quote; use syn::{parse_macro_input, ItemTrait}; #[proc_macro_attribute] pub fn marker_blanket(_: TokenStream, input: TokenStream) -> TokenStream { let input = parse_macro_input!(input as ItemTrait); let name = input.ident.clone(); let supertraits = input.supertraits.clone(); let expanded = quote! { #input impl<T: #supertraits> #name for T {} }; proc_macro::TokenStream::from(expanded) }