use std::path::PathBuf;
use crate::DEFAULT_KEY_COL_WIDTH;
use anyhow::Result;
use colored::Colorize as _;
use contract_extrinsics::ContractArtifacts;
#[derive(Debug, Clone, clap::Args)]
#[clap(
name = "encode",
about = "Encodes a contracts input calls and their arguments"
)]
pub struct EncodeCommand {
#[clap(value_parser, conflicts_with = "manifest_path")]
file: Option<PathBuf>,
#[clap(long, value_parser)]
manifest_path: Option<PathBuf>,
#[clap(long, short)]
message: String,
#[clap(long, num_args = 0..)]
args: Vec<String>,
}
impl EncodeCommand {
pub fn run(&self) -> Result<()> {
let artifacts = ContractArtifacts::from_manifest_or_file(
self.manifest_path.as_ref(),
self.file.as_ref(),
)?;
let transcoder = artifacts.contract_transcoder()?;
let call_data = transcoder.encode(&self.message, &self.args)?;
let call_data_encoded = hex::encode_upper(call_data);
println!(
"{:>width$} {}",
"Encoded data:".bright_green().bold(),
call_data_encoded,
width = DEFAULT_KEY_COL_WIDTH
);
Ok(())
}
}