1 use proc_macro::TokenStream;
2 use proc_macro2::{Ident, Span};
3 use quote::quote;
4 
5 #[proc_macro]
6 pub 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 }
24