diff options
| author | Kamen Mladenov <kamen@syndamia.com> | 2025-01-28 13:18:39 +0200 |
|---|---|---|
| committer | Kamen Mladenov <kamen@syndamia.com> | 2025-01-28 13:18:39 +0200 |
| commit | 17bcac02e208f1e6da33900410538f15d7436f25 (patch) | |
| tree | 886f8fd2c279bb67e4a8bdb1515fc8e359896a3d /zkvms_host_io/input_macros/src/lib.rs | |
| parent | 00bf16d27e2f33b8a63117b614f85e7e0c007c62 (diff) | |
| download | zkVMs-benchmarks-17bcac02e208f1e6da33900410538f15d7436f25.tar zkVMs-benchmarks-17bcac02e208f1e6da33900410538f15d7436f25.tar.gz zkVMs-benchmarks-17bcac02e208f1e6da33900410538f15d7436f25.zip | |
feat(zkvms_host_io/input_macros): Implement forach_input_field macro
Diffstat (limited to 'zkvms_host_io/input_macros/src/lib.rs')
| -rw-r--r-- | zkvms_host_io/input_macros/src/lib.rs | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/zkvms_host_io/input_macros/src/lib.rs b/zkvms_host_io/input_macros/src/lib.rs index 51fd613..2585653 100644 --- a/zkvms_host_io/input_macros/src/lib.rs +++ b/zkvms_host_io/input_macros/src/lib.rs @@ -34,3 +34,16 @@ pub fn generate_input_struct(_: TokenStream) -> TokenStream { struct_def.parse::<TokenStream>().unwrap() } + +#[proc_macro] +pub fn foreach_input_field(item: TokenStream) -> TokenStream { + let arg_patterns = args_divide(&get_args()).0; + + let expr = format!("{}", item); + let mut out = String::new(); + for field in arg_patterns { + // Unquoted yield is a keyword, so it is not allowed as field name + out += &expr.replace(".yield", &format!(".{field}")); + } + out.parse::<TokenStream>().unwrap() +} |
