Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 59 additions & 0 deletions zkstack_cli/crates/common/src/forge/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
mod runner;
mod script;
use std::path::{Path, PathBuf};

use clap::Parser;
pub use runner::{ForgeRunner, ForgeRunnerArgs, ForgeScriptRun};
pub use script::{ForgeScript, ForgeScriptArg, ForgeScriptArgs, ForgeVerifier};
use serde::{Deserialize, Serialize};

/// Forge is a wrapper around the forge binary.
pub struct Forge {
path: PathBuf,
}

impl Forge {
/// Create a new Forge instance.
pub fn new(path: &Path) -> Self {
Forge {
path: path.to_path_buf(),
}
}

/// Create a new ForgeScript instance.
///
/// The script path can be passed as a relative path to the base path
/// or as an absolute path.
pub fn script(&self, path: &Path, args: ForgeScriptArgs) -> ForgeScript {
ForgeScript {
base_path: self.path.clone(),
script_path: path.to_path_buf(),
args,
}
}
}

#[derive(Default, Debug, Serialize, Deserialize, Parser, Clone)]
pub struct ForgeArgs {
#[clap(flatten)]
#[serde(flatten)]
pub script: ForgeScriptArgs,
#[clap(flatten)]
#[serde(flatten)]
pub runner: ForgeRunnerArgs,
}

impl From<ForgeScriptArgs> for ForgeArgs {
fn from(script: ForgeScriptArgs) -> Self {
Self {
script,
runner: ForgeRunnerArgs::default(),
}
}
}

impl From<(ForgeScriptArgs, ForgeRunnerArgs)> for ForgeArgs {
fn from((script, runner): (ForgeScriptArgs, ForgeRunnerArgs)) -> Self {
Self { script, runner }
}
}
Loading
Loading