diff --git a/utilities/transaction_generator/src/cli.rs b/utilities/transaction_generator/src/cli.rs index 366d17d743..1530e3ed6d 100644 --- a/utilities/transaction_generator/src/cli.rs +++ b/utilities/transaction_generator/src/cli.rs @@ -35,8 +35,10 @@ pub struct WriteArgs { pub overwrite: bool, #[clap(long, short = 'm')] pub manifest: Option, - #[clap(long, short = 'g', alias = "global")] - pub manifest_globals: Vec, + #[clap(long, short = 'a', alias = "arg")] + pub manifest_args: Vec, + #[clap(long, alias = "args-file")] + pub manifest_args_file: Option, #[clap(long, short = 'k', alias = "signer")] pub signer_secret_key: Option, } diff --git a/utilities/transaction_generator/src/main.rs b/utilities/transaction_generator/src/main.rs index 1328abbf33..6b4c552141 100644 --- a/utilities/transaction_generator/src/main.rs +++ b/utilities/transaction_generator/src/main.rs @@ -7,7 +7,8 @@ mod transaction_writer; use std::{ collections::HashMap, fs, - io::{stdout, Seek, SeekFrom, Write}, + io, + io::{stdout, BufRead, Seek, SeekFrom, Write}, }; use anyhow::anyhow; @@ -87,22 +88,33 @@ fn get_transaction_builder(args: &WriteArgs) -> anyhow::Result Ok(Box::new(free_coins::builder)), } } -fn parse_globals(globals: &[String]) -> Result, anyhow::Error> { - let mut result = HashMap::with_capacity(globals.len()); - for global in globals { - let (name, value) = global - .split_once('=') - .ok_or_else(|| anyhow!("Invalid global: {}", global))?; - let value = value - .parse() - .map_err(|err| anyhow!("Failed to parse global '{}': {}", name, err))?; - result.insert(name.to_string(), value); - } - Ok(result) +fn parse_args(globals: &[String]) -> Result, anyhow::Error> { + globals.iter().map(|s| parse_arg(s)).collect() +} + +fn parse_arg(arg: &str) -> Result<(String, ManifestValue), anyhow::Error> { + let (name, value) = arg.split_once('=').ok_or_else(|| anyhow!("Invalid arg: {}", arg))?; + let value = value + .trim() + .parse() + .map_err(|err| anyhow!("Failed to parse arg '{}': {}", name, err))?; + Ok((name.trim().to_string(), value)) } diff --git a/utilities/transaction_generator/src/transaction_builders/manifest.rs b/utilities/transaction_generator/src/transaction_builders/manifest.rs index 1c726b47c9..cf07e0c2cf 100644 --- a/utilities/transaction_generator/src/transaction_builders/manifest.rs +++ b/utilities/transaction_generator/src/transaction_builders/manifest.rs @@ -18,7 +18,7 @@ pub fn builder>( let instructions = tari_transaction_manifest::parse_manifest(&contents, globals)?; Ok(Box::new(move |_| { Transaction::builder() - .with_fee_instructions_builder(|builder| builder.with_instructions(instructions.fee_instructions.clone())) + .with_fee_instructions(instructions.fee_instructions.clone()) .with_instructions(instructions.instructions.clone()) .sign(&signer_secret_key) .build()