component_macro_test_helpers/
lib.rs

1use proc_macro::TokenStream;
2use proc_macro2::{Ident, Span};
3use quote::quote;
4
5#[proc_macro]
6pub fn foreach(input: TokenStream) -> TokenStream {
7    let input = proc_macro2::TokenStream::from(input);
8    let mut cwd = std::env::current_dir().unwrap();
9    cwd.push("crates/component-macro/tests/codegen");
10    let mut result = Vec::new();
11    for f in cwd.read_dir().unwrap() {
12        let f = f.unwrap().path();
13        if f.extension().and_then(|s| s.to_str()) == Some("wit") || f.is_dir() {
14            let name = f.file_stem().unwrap().to_str().unwrap();
15            let ident = Ident::new(&name.replace("-", "_"), Span::call_site());
16            let path = f.to_str().unwrap();
17            result.push(quote! {
18                #input!(#ident #name #path);
19            });
20        }
21    }
22    (quote!( #(#result)*)).into()
23}