cargo_openvm/commands/
run.rs

1use std::path::PathBuf;
2
3use clap::Parser;
4use eyre::Result;
5use openvm_sdk::{fs::read_exe_from_file, Sdk};
6
7use crate::{
8    default::{DEFAULT_APP_CONFIG_PATH, DEFAULT_APP_EXE_PATH},
9    input::{read_to_stdin, Input},
10    util::read_config_toml_or_default,
11};
12
13#[derive(Parser)]
14#[command(name = "run", about = "Run an OpenVM program")]
15pub struct RunCmd {
16    #[arg(long, action, help = "Path to OpenVM executable", default_value = DEFAULT_APP_EXE_PATH)]
17    exe: PathBuf,
18
19    #[arg(long, action, help = "Path to app config TOML file", default_value = DEFAULT_APP_CONFIG_PATH)]
20    config: PathBuf,
21
22    #[arg(long, value_parser, help = "Input to OpenVM program")]
23    input: Option<Input>,
24}
25
26impl RunCmd {
27    pub fn run(&self) -> Result<()> {
28        let exe = read_exe_from_file(&self.exe)?;
29        let app_config = read_config_toml_or_default(&self.config)?;
30        let sdk = Sdk::new();
31        let output = sdk.execute(exe, app_config.app_vm_config, read_to_stdin(&self.input)?)?;
32        println!("Execution output: {:?}", output);
33        Ok(())
34    }
35}