diff options
| author | Kamen Mladenov <kamen@syndamia.com> | 2025-01-28 13:04:02 +0200 |
|---|---|---|
| committer | Kamen Mladenov <kamen@syndamia.com> | 2025-01-28 13:04:02 +0200 |
| commit | 6e3ef85fd7b9e2e97583105a28a5a863527cfe59 (patch) | |
| tree | 3ff489706658532819fa5bcf0f4e6ec18bd2b912 /zkvms_host_io/input_macros/src/lib.rs | |
| parent | a82b39d1001fb6cb8d6e1cc824028aa08c7ed6de (diff) | |
| download | zkVMs-benchmarks-6e3ef85fd7b9e2e97583105a28a5a863527cfe59.tar zkVMs-benchmarks-6e3ef85fd7b9e2e97583105a28a5a863527cfe59.tar.gz zkVMs-benchmarks-6e3ef85fd7b9e2e97583105a28a5a863527cfe59.zip | |
feat(zkvms_host_io): Generate input type from string and read input data from TOML file
Diffstat (limited to 'zkvms_host_io/input_macros/src/lib.rs')
| -rw-r--r-- | zkvms_host_io/input_macros/src/lib.rs | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/zkvms_host_io/input_macros/src/lib.rs b/zkvms_host_io/input_macros/src/lib.rs new file mode 100644 index 0000000..51fd613 --- /dev/null +++ b/zkvms_host_io/input_macros/src/lib.rs @@ -0,0 +1,36 @@ +use proc_macro::TokenStream; + +#[path = "../../../guests_macro/src/parse_fn.rs"] +mod parse_fn; +use crate::parse_fn::{ args_split, args_divide, group_streams }; + + +fn get_args() -> TokenStream { + "(graph: Vec<Vec<bool>>, colors: u32, coloring: Vec<Vec<u32>>,)".parse::<TokenStream>().unwrap() +} + +#[proc_macro] +pub fn generate_input_struct(_: TokenStream) -> TokenStream { + let args = &get_args(); + let all_args = args_split(&args); + + let mut struct_def = "#[derive(Debug, Serialize, Deserialize)] pub struct Input {".to_string(); + for arg in all_args { + struct_def += &format!("pub {arg},"); + } + + let (patterns, types) = args_divide(&args); + let types = group_streams(&types); + struct_def += &format!("}} + impl From<Input> for {types} {{ + fn from(input: Input) -> {types} {{ + ( + "); + + for field in patterns { + struct_def += &format!("input.{field},"); + } + struct_def += ") } }"; + + struct_def.parse::<TokenStream>().unwrap() +} |
