aboutsummaryrefslogtreecommitdiff
path: root/zkvms_host_io/input_macros/src
diff options
context:
space:
mode:
authorKamen Mladenov <kamen@syndamia.com>2025-01-28 13:18:39 +0200
committerKamen Mladenov <kamen@syndamia.com>2025-01-28 13:18:39 +0200
commit17bcac02e208f1e6da33900410538f15d7436f25 (patch)
tree886f8fd2c279bb67e4a8bdb1515fc8e359896a3d /zkvms_host_io/input_macros/src
parent00bf16d27e2f33b8a63117b614f85e7e0c007c62 (diff)
downloadzkVMs-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')
-rw-r--r--zkvms_host_io/input_macros/src/lib.rs13
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()
+}