1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
#![feature(once_cell)] use std::ops::Range; use proc_macro::TokenStream; use quote::quote; mod rebound; #[proc_macro] pub fn impl_find(input: TokenStream) -> TokenStream { let name: syn::Ident = syn::parse(input).unwrap(); let range: Range<u8> = 0..255; quote!( #( let cur = <Self as ReflectedImpl<#range>>::#name(); match cur { Some(a) => { sum.extend(a); }, None => return sum, } )* ).into() } #[proc_macro_attribute] pub fn rebound(attrs: TokenStream, item: TokenStream) -> TokenStream { rebound::rebound(attrs.into(), item.into()).into() }