nifpga_type_macro/
lib.rs

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}