aboutsummaryrefslogtreecommitdiff
path: root/zkvms/zkwasm
diff options
context:
space:
mode:
authorKamen Mladenov <kamen@syndamia.com>2025-02-06 15:14:15 +0200
committerKamen Mladenov <kamen@syndamia.com>2025-02-06 15:14:15 +0200
commit9c96ce04a8725f159e473a4990fe16c83ad2fad6 (patch)
treecacdfcf403a78c452ec893b4f5f89361e8376d0e /zkvms/zkwasm
parent523000d75ac6c194ccaa3aec0d8b29ef07d3f504 (diff)
downloadzkVMs-benchmarks-9c96ce04a8725f159e473a4990fe16c83ad2fad6.tar
zkVMs-benchmarks-9c96ce04a8725f159e473a4990fe16c83ad2fad6.tar.gz
zkVMs-benchmarks-9c96ce04a8725f159e473a4990fe16c83ad2fad6.zip
feat(zkvms/zkwasm): Support all std containers as input types
Diffstat (limited to 'zkvms/zkwasm')
-rw-r--r--zkvms/zkwasm/wrapper_macro/src/lib.rs21
1 files changed, 14 insertions, 7 deletions
diff --git a/zkvms/zkwasm/wrapper_macro/src/lib.rs b/zkvms/zkwasm/wrapper_macro/src/lib.rs
index 76f49fc..301ba60 100644
--- a/zkvms/zkwasm/wrapper_macro/src/lib.rs
+++ b/zkvms/zkwasm/wrapper_macro/src/lib.rs
@@ -86,27 +86,27 @@ fn return_array(readfn: &TokenTree, inner: &TokenStream) -> TokenStream {
").parse().unwrap()
}
-fn return_vec(readfn: &TokenTree, inner: &TokenStream) -> TokenStream {
+fn return_cont(readfn: &TokenTree, container: &Ident, pushfn: &str, inner: &TokenStream) -> TokenStream {
format!("
{{
- let mut ret = Vec::new();
+ let mut ret = {container}::new();
let size = read!({readfn} usize);
for _ in 0..size {{
- ret.push(read!({readfn} {inner}));
+ ret.{pushfn}(read!({readfn} {inner}));
}}
ret
}}
").parse().unwrap()
}
-fn return_hashmap(readfn: &TokenTree, inner: &TokenStream) -> TokenStream {
+fn return_hashmap(readfn: &TokenTree, container: &Ident, inner: &TokenStream) -> TokenStream {
let mut inner = inner.clone().into_iter();
let key_type = inner.next().unwrap();
inner.next().unwrap();
let value_type = inner.next().unwrap();
format!(r#"
{{
- let mut ret = HashMap::new();
+ let mut ret = {container}::new();
let size = read!({readfn} usize);
for _ in 0..size {{
ret.insert(read!({readfn} {key_type}), read!({readfn} {value_type}));
@@ -156,8 +156,15 @@ pub fn read(item: TokenStream) -> TokenStream {
let rest = inner_group.stream();
match ident.to_string().as_str() {
- "Vec" => return_vec(&readfn, &rest),
- "HashMap" => return_hashmap(&readfn, &rest),
+ // https://doc.rust-lang.org/std/collections/
+ "Vec" | "BinaryHeap" =>
+ return_cont(&readfn, &ident, "push", &rest),
+ "VecDeque" | "LinkedList" =>
+ return_cont(&readfn, &ident, "push_back", &rest),
+ "HashSet" | "BTreeSet" =>
+ return_cont(&readfn, &ident, "insert", &rest),
+ "HashMap" | "BTreeMap" =>
+ return_hashmap(&readfn, &ident, &rest),
_ => todo!("Unsupported container {ident}"),
}
}