1extern crate proc_macro;
2extern crate proc_macro2;
3extern crate quote;
4extern crate syn;
5
6use proc_macro::TokenStream;
7use quote::quote;
8
9#[proc_macro_attribute]
10pub fn datatype(attr: TokenStream, item: TokenStream) -> TokenStream {
11 let attr = attr.to_string();
12 let item2 = item.clone();
13 let inp = syn::parse_macro_input!(item as syn::Item);
14 let item = item2.to_string();
15 let types = attr.split(" ");
16 let code: proc_macro2::TokenStream = types
17 .fold("".to_string(), |mut string, datatype| {
18 string.push_str(&item.clone().replace("f32", datatype));
19 string
20 })
21 .parse()
22 .unwrap();
23 let code = quote! {
24 #inp
25 #code
26 };
27 TokenStream::from(code)
28}