From 9ff29ae491cb61dc037f390832686edd101f1d53 Mon Sep 17 00:00:00 2001 From: Daniel Karzel Date: Fri, 21 May 2021 11:46:11 +1000 Subject: [PATCH] CLI `--help` and `--version` are handled correctly Since we introduced our own parsing function for command line arguments, we have to make sure that clap's behaviour is handled correctly. Clap's `get_matches_from_safe` returns an error of a certain kind, of which `ErrorKind::HelpDisplayed` and `ErrorKind::VersionDisplayed ` have to be handled to properly print the help/version and exit the program. The clap error includes the message, so we print help/version in main now and ensure the program exits with `0` afterwards. --- swap/src/bin/swap.rs | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/swap/src/bin/swap.rs b/swap/src/bin/swap.rs index 87ba6845..28f91ba4 100644 --- a/swap/src/bin/swap.rs +++ b/swap/src/bin/swap.rs @@ -20,6 +20,8 @@ use std::future::Future; use std::path::PathBuf; use std::sync::Arc; use std::time::Duration; +use structopt::clap; +use structopt::clap::ErrorKind; use swap::bitcoin::TxLock; use swap::cli::command::{parse_args_and_apply_defaults, Arguments, Command}; use swap::database::Database; @@ -44,7 +46,23 @@ async fn main() -> Result<()> { data_dir, debug, cmd, - } = parse_args_and_apply_defaults(env::args_os())?; + } = match parse_args_and_apply_defaults(env::args_os()) { + Ok(args) => args, + Err(e) => { + if let Some(clap_err) = e.downcast_ref::() { + match clap_err.kind { + ErrorKind::HelpDisplayed | ErrorKind::VersionDisplayed => { + println!("{}", clap_err.message); + std::process::exit(0); + } + _ => { + bail!(e); + } + } + } + bail!(e); + } + }; match cmd { Command::BuyXmr {