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
#![doc = include_str!("../README.md")]
use proc_macro::TokenStream;
use quote::quote;
use syn::parse_macro_input;
#[proc_macro_attribute]
pub fn webassembly_test(_attr: TokenStream, item: TokenStream) -> TokenStream {
let mut item = parse_macro_input!(item as syn::ItemFn);
let name = item.sig.ident.to_string();
let mut ignore = "";
if let Some(i) = item.attrs.iter().position(|attr| is_ignore(attr)) {
item.attrs.remove(i);
ignore = "ignore$"
}
let res = quote! {
#[cfg(test)]
#[export_name = concat!("$webassembly-test$", #ignore, module_path!(), "::", #name)]
#item
};
res.into()
}
fn is_ignore(attr: &syn::Attribute) -> bool {
attr.path.is_ident("ignore")
}