aboutsummaryrefslogtreecommitdiff
path: root/zkvms_host_io
diff options
context:
space:
mode:
Diffstat (limited to 'zkvms_host_io')
-rw-r--r--zkvms_host_io/input_macros/src/lib.rs65
-rw-r--r--zkvms_host_io/src/lib.rs49
2 files changed, 71 insertions, 43 deletions
diff --git a/zkvms_host_io/input_macros/src/lib.rs b/zkvms_host_io/input_macros/src/lib.rs
index c3a34f7..60d3d48 100644
--- a/zkvms_host_io/input_macros/src/lib.rs
+++ b/zkvms_host_io/input_macros/src/lib.rs
@@ -2,7 +2,9 @@ use proc_macro::TokenStream;
#[path = "../../../guests_macro/src/parse_fn.rs"]
mod parse_fn;
-use crate::parse_fn::{ args_split, args_split_public, args_divide, args_divide_public, group_streams };
+use crate::parse_fn::{
+ args_divide, args_divide_public, args_split, args_split_public, group_streams,
+};
/// Parses the `guests/type.txt` type note, created from the guest
/// Returns a tuple of the arguments group and the return type
@@ -10,7 +12,10 @@ fn get_types() -> (TokenStream, TokenStream) {
let types: Vec<&str> = include_str!("../../../guests/type.txt")
.split('\n')
.collect();
- (types[0].parse::<TokenStream>().unwrap(), types[1].parse::<TokenStream>().unwrap())
+ (
+ types[0].parse::<TokenStream>().unwrap(),
+ types[1].parse::<TokenStream>().unwrap(),
+ )
}
static DERIVES: &str = "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]";
@@ -68,13 +73,14 @@ pub fn generate_output_type_input_struct(_: TokenStream) -> TokenStream {
let (args, ret) = get_types();
let (patterns, types) = args_divide(&args);
- let public_inputs = toml::from_str::<toml::Table>(
- include_str!(concat!(env!("INPUTS_DIR"), "/default_public_input.toml"))
- )
- .unwrap();
+ let public_inputs = toml::from_str::<toml::Table>(include_str!(concat!(
+ env!("INPUTS_DIR"),
+ "/default_public_input.toml"
+ )))
+ .unwrap();
let public_types = args_divide_public(&args, &public_inputs.keys().collect())
.0
- .1
+ .1
.iter()
.map(|x| x.to_string() + ", ")
.collect::<String>();
@@ -85,13 +91,18 @@ pub fn generate_output_type_input_struct(_: TokenStream) -> TokenStream {
.iter()
.map(|x| format!("pub {x},"))
.collect::<String>();
- let public_input_type = format!("{} pub struct PublicInput {{ {} }}", DERIVES, public_attrs).to_string();
+ let public_input_type =
+ format!("{} pub struct PublicInput {{ {} }}", DERIVES, public_attrs).to_string();
let private_attrs = private_args
.iter()
.map(|x| format!("pub {x},"))
.collect::<String>();
- let private_input_type = format!("{} pub struct PrivateInput {{ {} }}", DERIVES, private_attrs).to_string();
+ let private_input_type = format!(
+ "{} pub struct PrivateInput {{ {} }}",
+ DERIVES, private_attrs
+ )
+ .to_string();
let all_args = args_split(&args);
@@ -101,18 +112,22 @@ pub fn generate_output_type_input_struct(_: TokenStream) -> TokenStream {
}
let types = group_streams(&types);
- struct_def += &format!("}}
+ struct_def += &format!(
+ "}}
impl From<Input> for {types} {{
fn from(input: Input) -> {types} {{
(
- ");
+ "
+ );
for field in patterns {
struct_def += &format!("input.{field},");
}
struct_def += ") } }";
- (output_type + &public_input_type + &private_input_type + &struct_def).parse::<TokenStream>().unwrap()
+ (output_type + &public_input_type + &private_input_type + &struct_def)
+ .parse::<TokenStream>()
+ .unwrap()
}
/// Repeats the given item as many times as fields there are, while replacing
@@ -145,11 +160,14 @@ pub fn foreach_input_field(item: TokenStream) -> TokenStream {
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;
+ 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)
}
@@ -161,11 +179,14 @@ pub fn foreach_public_input_field(item: TokenStream) -> TokenStream {
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;
+ 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)
}
diff --git a/zkvms_host_io/src/lib.rs b/zkvms_host_io/src/lib.rs
index 27099ef..b2049f5 100644
--- a/zkvms_host_io/src/lib.rs
+++ b/zkvms_host_io/src/lib.rs
@@ -1,12 +1,16 @@
use clap::{Parser, ValueEnum};
-use num_traits::NumCast;
-use serde::{ Serialize, Deserialize };
use env_file_reader::read_str;
-use std::{env, option::Option, fs::read_to_string, collections::*};
-pub use input_macros::{ foreach_input_field, foreach_public_input_field, foreach_private_input_field, benchmarkable };
+pub use input_macros::{
+ benchmarkable, foreach_input_field, foreach_private_input_field, foreach_public_input_field,
+};
+use num_traits::NumCast;
+use serde::{Deserialize, Serialize};
+use std::{collections::*, env, fs::read_to_string, option::Option};
-static DEFAULT_PUBLIC_INPUT: &str = include_str!(concat!(env!("INPUTS_DIR"), "/default_public_input.toml"));
-static DEFAULT_PRIVATE_INPUT: &str = include_str!(concat!(env!("INPUTS_DIR"), "/default_private_input.toml"));
+static DEFAULT_PUBLIC_INPUT: &str =
+ include_str!(concat!(env!("INPUTS_DIR"), "/default_public_input.toml"));
+static DEFAULT_PRIVATE_INPUT: &str =
+ include_str!(concat!(env!("INPUTS_DIR"), "/default_private_input.toml"));
static DEFAULT_ENV: &str = include_str!(concat!(env!("INPUTS_DIR"), "/default.env"));
/// A CLI tool for running and benchmarking guest programs inside a zkVM
@@ -79,15 +83,18 @@ impl RunWith {
/// function is executed to convert the String value.
///
/// The default environment is taken from the guest's `default.env`
- pub fn env_then_or<T>(&self, variable_name: &str, then_apply: fn(String) -> Option<T>, else_const: T) -> T {
- env::var(variable_name)
- .ok()
- .and_then(then_apply)
- .unwrap_or(self
- .default_env
+ pub fn env_then_or<T>(
+ &self,
+ variable_name: &str,
+ then_apply: fn(String) -> Option<T>,
+ else_const: T,
+ ) -> T {
+ env::var(variable_name).ok().and_then(then_apply).unwrap_or(
+ self.default_env
.get(variable_name)
.and_then(|x| then_apply(x.clone()))
- .unwrap_or(else_const))
+ .unwrap_or(else_const),
+ )
}
/// Returns a value of the given name from the environment,
@@ -106,15 +113,15 @@ pub fn read_args() -> RunWith {
let cli = Cli::parse();
let public_contents: String = if cli.public_input.is_some() {
- read_to_string(cli.public_input.unwrap()).unwrap()
- } else {
- DEFAULT_PUBLIC_INPUT.to_string()
- };
+ read_to_string(cli.public_input.unwrap()).unwrap()
+ } else {
+ DEFAULT_PUBLIC_INPUT.to_string()
+ };
let private_contents: String = if cli.private_input.is_some() {
- read_to_string(cli.private_input.unwrap()).unwrap()
- } else {
- DEFAULT_PRIVATE_INPUT.to_string()
- };
+ read_to_string(cli.private_input.unwrap()).unwrap()
+ } else {
+ DEFAULT_PRIVATE_INPUT.to_string()
+ };
let input: Input = toml::from_str(&(public_contents.clone() + &private_contents)).unwrap();
let public_input: PublicInput = toml::from_str(&public_contents).unwrap();
let private_input: PrivateInput = toml::from_str(&private_contents).unwrap();