diff options
| author | Kamen Mladenov <kamen@syndamia.com> | 2025-02-03 17:41:34 +0200 |
|---|---|---|
| committer | Kamen Mladenov <kamen@syndamia.com> | 2025-02-03 17:42:20 +0200 |
| commit | 765f559de1edcc4935c3e3f7bd10553ec1641132 (patch) | |
| tree | 2dee59e0aa88b30d0e1f66315b4eeaddbbb7491d /zkvms_host_io/input_macros/src/lib.rs | |
| parent | 73e27ae16e920424a77be597e4d1b15466b368eb (diff) | |
| download | zkVMs-benchmarks-765f559de1edcc4935c3e3f7bd10553ec1641132.tar zkVMs-benchmarks-765f559de1edcc4935c3e3f7bd10553ec1641132.tar.gz zkVMs-benchmarks-765f559de1edcc4935c3e3f7bd10553ec1641132.zip | |
feat(zkvms_host_io): Implement foreach_private_input_field and foreach_public_input_field macros
Diffstat (limited to 'zkvms_host_io/input_macros/src/lib.rs')
| -rw-r--r-- | zkvms_host_io/input_macros/src/lib.rs | 42 |
1 files changed, 36 insertions, 6 deletions
diff --git a/zkvms_host_io/input_macros/src/lib.rs b/zkvms_host_io/input_macros/src/lib.rs index 49cff80..868c755 100644 --- a/zkvms_host_io/input_macros/src/lib.rs +++ b/zkvms_host_io/input_macros/src/lib.rs @@ -65,16 +65,46 @@ pub fn generate_output_type_input_struct(_: TokenStream) -> TokenStream { (output_type + &public_input_type + &private_input_type + &struct_def).parse::<TokenStream>().unwrap() } -#[proc_macro] -pub fn foreach_input_field(item: TokenStream) -> TokenStream { - let (args, _) = get_types(); - let arg_patterns = args_divide(&args).0; - +fn foreach_field(item: TokenStream, fields: Vec<TokenStream>) -> TokenStream { let expr = format!("{}", item); let mut out = String::new(); - for field in arg_patterns { + for field in fields { // Unquoted yield is a keyword, so it is not allowed as field name out += &expr.replace(".yield", &format!(".{field}")); } out.parse::<TokenStream>().unwrap() } + +#[proc_macro] +pub fn foreach_input_field(item: TokenStream) -> TokenStream { + let (args, _) = get_types(); + let arg_patterns = args_divide(&args).0; + + foreach_field(item, arg_patterns) +} + +#[proc_macro] +pub fn foreach_public_input_field(item: TokenStream) -> TokenStream { + let (args, _) = get_types(); + + let public_inputs = toml::from_str::<toml::Table>( + include_str!(concat!(env!("INPUTS_DIR"), "/default_public_input.toml")) + ) + .unwrap(); + let public_patterns = args_divide_public(&args, &public_inputs.keys().collect()).0.0; + + foreach_field(item, public_patterns) +} + +#[proc_macro] +pub fn foreach_private_input_field(item: TokenStream) -> TokenStream { + let (args, _) = get_types(); + + let public_inputs = toml::from_str::<toml::Table>( + include_str!(concat!(env!("INPUTS_DIR"), "/default_public_input.toml")) + ) + .unwrap(); + let private_patterns = args_divide_public(&args, &public_inputs.keys().collect()).1.0; + + foreach_field(item, private_patterns) +} |
