mod command;
mod writer;
use crate::shared::HostInfoParams;
use clap::ValueEnum;
use sc_cli::{
WasmExecutionMethod, WasmtimeInstantiationStrategy, DEFAULT_WASMTIME_INSTANTIATION_STRATEGY,
DEFAULT_WASM_EXECUTION_METHOD,
};
use std::{fmt::Debug, path::PathBuf};
fn parse_pallet_name(pallet: &str) -> std::result::Result<String, String> {
Ok(pallet.replace("-", "_"))
}
#[derive(Debug, Clone, Copy, ValueEnum)]
pub enum ListOutput {
All,
Pallets,
}
#[derive(Debug, clap::Parser)]
pub struct PalletCmd {
#[arg(short, long, value_parser = parse_pallet_name, required_unless_present_any = ["list", "json_input", "all"], default_value_if("all", "true", Some("*".into())))]
pub pallet: Option<String>,
#[arg(short, long, required_unless_present_any = ["list", "json_input", "all"], default_value_if("all", "true", Some("*".into())))]
pub extrinsic: Option<String>,
#[arg(long)]
pub all: bool,
#[arg(short, long, default_value_t = 50)]
pub steps: u32,
#[arg(long = "low", value_delimiter = ',')]
pub lowest_range_values: Vec<u32>,
#[arg(long = "high", value_delimiter = ',')]
pub highest_range_values: Vec<u32>,
#[arg(short, long, default_value_t = 20)]
pub repeat: u32,
#[arg(long, default_value_t = 1)]
pub external_repeat: u32,
#[arg(long = "json")]
pub json_output: bool,
#[arg(long, conflicts_with = "json_output")]
pub json_file: Option<PathBuf>,
#[arg(long)]
pub no_median_slopes: bool,
#[arg(long)]
pub no_min_squares: bool,
#[arg(long)]
pub output: Option<PathBuf>,
#[arg(long)]
pub header: Option<PathBuf>,
#[arg(long)]
pub template: Option<PathBuf>,
#[allow(missing_docs)]
#[clap(flatten)]
pub hostinfo_params: HostInfoParams,
#[arg(long)]
pub output_analysis: Option<String>,
#[arg(long, default_value("median-slopes"))]
pub output_pov_analysis: Option<String>,
#[arg(long, default_value("max-encoded-len"), value_enum)]
pub default_pov_mode: command::PovEstimationMode,
#[arg(long)]
pub heap_pages: Option<u64>,
#[arg(long)]
pub no_verify: bool,
#[arg(long)]
pub extra: bool,
#[allow(missing_docs)]
#[clap(flatten)]
pub shared_params: sc_cli::SharedParams,
#[arg(
long = "wasm-execution",
value_name = "METHOD",
value_enum,
ignore_case = true,
default_value_t = DEFAULT_WASM_EXECUTION_METHOD,
)]
pub wasm_method: WasmExecutionMethod,
#[arg(
long = "wasm-instantiation-strategy",
value_name = "STRATEGY",
default_value_t = DEFAULT_WASMTIME_INSTANTIATION_STRATEGY,
value_enum,
)]
pub wasmtime_instantiation_strategy: WasmtimeInstantiationStrategy,
#[arg(long = "execution")]
pub execution: Option<String>,
#[arg(long = "db-cache", value_name = "MiB", default_value_t = 1024)]
pub database_cache_size: u32,
#[arg(long, value_enum, ignore_case = true, num_args = 0..=1, require_equals = true, default_missing_value("All"))]
pub list: Option<ListOutput>,
#[arg(long, requires("list"))]
pub no_csv_header: bool,
#[arg(long)]
pub no_storage_info: bool,
#[clap(long = "map-size", default_value = "1000000")]
pub worst_case_map_values: u32,
#[clap(long, default_value = "2")]
pub additional_trie_layers: u8,
#[arg(long)]
pub json_input: Option<PathBuf>,
#[arg(long)]
pub unsafe_overwrite_results: bool,
}