1#![doc = include_str!("../README.md")]
2
3use proc_macro::TokenStream;
4use quote::quote;
5use syn::parse_macro_input;
6
7#[proc_macro_attribute]
8pub fn webassembly_test(_attr: TokenStream, item: TokenStream) -> TokenStream {
9 let mut item = parse_macro_input!(item as syn::ItemFn);
10 let name = item.sig.ident.to_string();
11
12 let mut ignore = "";
13 if let Some(i) = item.attrs.iter().position(|attr| is_ignore(attr)) {
14 item.attrs.remove(i);
15 ignore = "ignore$"
16 }
17
18 let res = quote! {
19 #[cfg(test)]
20 #[export_name = concat!("$webassembly-test$", #ignore, module_path!(), "::", #name)]
21 #item
22 };
23 res.into()
25}
26
27fn is_ignore(attr: &syn::Attribute) -> bool {
28 attr.path.is_ident("ignore")
29}