webassembly_test/
lib.rs

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    // eprintln!("{}", res);
24    res.into()
25}
26
27fn is_ignore(attr: &syn::Attribute) -> bool {
28    attr.path.is_ident("ignore")
29}