use clap::{Args, Subcommand};
use color_eyre::eyre::Result;
use std::path::PathBuf;
pub mod commands;
pub mod config;
pub mod orchestrator;
#[derive(Subcommand, Debug)]
pub enum HarnessCommands {
Up(UpArgs),
Down,
Status,
Logs(LogsArgs),
Test(TestArgs),
List,
}
#[derive(Args, Debug, Clone, Default)]
pub struct ChainArgs {
#[arg(long)]
pub no_anvil: bool,
#[arg(long)]
pub rpc_url: Option<String>,
#[arg(long)]
pub ws_url: Option<String>,
#[arg(long)]
pub chain_id: Option<u64>,
#[arg(long)]
pub tangle_contract: Option<String>,
#[arg(long)]
pub keystore_path: Option<String>,
#[arg(long)]
pub router_url: Option<String>,
}
#[derive(Args, Debug)]
pub struct UpArgs {
#[arg(long, short = 'c')]
pub config: Option<PathBuf>,
#[arg(long)]
pub only: Option<String>,
#[arg(long)]
pub include_anvil_logs: bool,
#[arg(long)]
pub compose: Option<String>,
#[command(flatten)]
pub chain: ChainArgs,
}
#[derive(Args, Debug)]
pub struct TestArgs {
#[arg(long, short = 'c')]
pub config: Option<PathBuf>,
#[arg(long)]
pub only: Option<String>,
#[arg(long)]
pub compose: Option<String>,
#[command(flatten)]
pub chain: ChainArgs,
}
#[derive(Args, Debug)]
pub struct LogsArgs {
#[arg(long, short = 'f')]
pub follow: bool,
#[arg(long)]
pub only: Option<String>,
}
pub async fn execute(command: HarnessCommands) -> Result<()> {
match command {
HarnessCommands::Up(args) => commands::up::run(args).await,
HarnessCommands::Down => commands::down::run().await,
HarnessCommands::Status => commands::status::run().await,
HarnessCommands::Logs(args) => commands::logs::run(args).await,
HarnessCommands::Test(args) => commands::test::run(args).await,
HarnessCommands::List => commands::list::run().await,
}
}