component_macro_test_helpers/
lib.rs1use 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}