From c11593e7e4847b3a11bd9c99ed718b80f5462321 Mon Sep 17 00:00:00 2001 From: Carson McManus Date: Mon, 21 Feb 2022 12:14:15 -0500 Subject: [PATCH] add --fail-fast argument for responding to confirmations --- src/main.rs | 48 ++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 42 insertions(+), 6 deletions(-) diff --git a/src/main.rs b/src/main.rs index aa2f0c0..d064b06 100644 --- a/src/main.rs +++ b/src/main.rs @@ -85,10 +85,15 @@ fn cli() -> App<'static, 'static> { .about("Interactive interface for trade confirmations") .arg( Arg::with_name("accept-all") - .short("a") - .long("accept-all") - .takes_value(false) - .help("Accept all open trade confirmations. Does not open interactive interface.") + .short("a") + .long("accept-all") + .takes_value(false) + .help("Accept all open trade confirmations. Does not open interactive interface.") + ) + .arg( + Arg::with_name("fail-fast") + .takes_value(false) + .help("If submitting a confirmation response fails, exit immediately.") ) ) .subcommand( @@ -409,22 +414,49 @@ fn run() -> anyhow::Result<()> { } } + let mut any_failed = false; + let fail_fast = trade_matches.is_present("fail-fast"); if trade_matches.is_present("accept-all") { info!("accepting all confirmations"); for conf in &confirmations { let result = account.accept_confirmation(conf); - debug!("accept confirmation result: {:?}", result); + if result.is_err() { + warn!("accept confirmation result: {:?}", result); + any_failed = true; + if fail_fast { + return result; + } + } else { + debug!("accept confirmation result: {:?}", result); + } } } else { if termion::is_tty(&stdout()) { let (accept, deny) = tui::prompt_confirmation_menu(confirmations); for conf in &accept { let result = account.accept_confirmation(conf); - debug!("accept confirmation result: {:?}", result); + if result.is_err() { + warn!("accept confirmation result: {:?}", result); + any_failed = true; + if fail_fast { + return result; + } + } else { + debug!("accept confirmation result: {:?}", result); + } } for conf in &deny { let result = account.deny_confirmation(conf); debug!("deny confirmation result: {:?}", result); + if result.is_err() { + warn!("deny confirmation result: {:?}", result); + any_failed = true; + if fail_fast { + return result; + } + } else { + debug!("deny confirmation result: {:?}", result); + } } } else { warn!("not a tty, not showing menu"); @@ -433,6 +465,10 @@ fn run() -> anyhow::Result<()> { } } } + + if any_failed { + error!("Failed to respond to some confirmations."); + } } manifest.save(&passkey)?;