From f091402c7a83d3c786099dd988d247af54e4bd98 Mon Sep 17 00:00:00 2001 From: Daniel Karzel Date: Fri, 5 Mar 2021 16:00:52 +1100 Subject: [PATCH] Remove parameter duplication by introducing structs --- swap/src/bin/swap_cli.rs | 24 ++++++++++++++------ swap/src/cli/command.rs | 48 ++++++++++++++++++++++------------------ 2 files changed, 43 insertions(+), 29 deletions(-) diff --git a/swap/src/bin/swap_cli.rs b/swap/src/bin/swap_cli.rs index fffcee53..86454f78 100644 --- a/swap/src/bin/swap_cli.rs +++ b/swap/src/bin/swap_cli.rs @@ -20,7 +20,7 @@ use std::sync::Arc; use std::time::Duration; use structopt::StructOpt; use swap::bitcoin::{Amount, TxLock}; -use swap::cli::command::{Arguments, Command}; +use swap::cli::command::{Arguments, Command, ConnectParams, MoneroParams}; use swap::cli::config::{read_config, Config}; use swap::database::Database; use swap::execution_params::GetExecutionParams; @@ -84,9 +84,14 @@ async fn main() -> Result<()> { match args.cmd { Command::BuyXmr { - receive_monero_address, - alice_peer_id, - alice_addr, + connect_params: + ConnectParams { + alice_peer_id, + alice_addr, + }, + monero_params: MoneroParams { + receive_monero_address, + }, } => { if receive_monero_address.network != monero_network { bail!( @@ -159,10 +164,15 @@ async fn main() -> Result<()> { table.printstd(); } Command::Resume { - receive_monero_address, swap_id, - alice_peer_id, - alice_addr, + connect_params: + ConnectParams { + alice_peer_id, + alice_addr, + }, + monero_params: MoneroParams { + receive_monero_address, + }, } => { if receive_monero_address.network != monero_network { bail!("The given monero address is on network {:?}, expected address of network {:?}.", receive_monero_address.network, monero_network) diff --git a/swap/src/cli/command.rs b/swap/src/cli/command.rs index e478680f..bdd6d3a9 100644 --- a/swap/src/cli/command.rs +++ b/swap/src/cli/command.rs @@ -28,36 +28,22 @@ pub struct Arguments { #[structopt(name = "xmr_btc-swap", about = "XMR BTC atomic swap")] pub enum Command { BuyXmr { - #[structopt(long = "receive-address", parse(try_from_str = parse_monero_address))] - receive_monero_address: monero::Address, + #[structopt(flatten)] + connect_params: ConnectParams, - #[structopt(long = "connect-peer-id", default_value = DEFAULT_ALICE_PEER_ID)] - alice_peer_id: PeerId, - - #[structopt( - long = "connect-addr", - default_value = DEFAULT_ALICE_MULTIADDR - )] - alice_addr: Multiaddr, + #[structopt(flatten)] + monero_params: MoneroParams, }, History, Resume { - #[structopt(long = "receive-address", parse(try_from_str = parse_monero_address))] - receive_monero_address: monero::Address, - #[structopt(long = "swap-id")] swap_id: Uuid, - // TODO: Remove Alice peer-id/address, it should be saved in the database when running swap - // and loaded from the database when running resume/cancel/refund - #[structopt(long = "counterpart-peer-id", default_value = DEFAULT_ALICE_PEER_ID)] - alice_peer_id: PeerId, + #[structopt(flatten)] + connect_params: ConnectParams, - #[structopt( - long = "counterpart-addr", - default_value = DEFAULT_ALICE_MULTIADDR - )] - alice_addr: Multiaddr, + #[structopt(flatten)] + monero_params: MoneroParams, }, Cancel { #[structopt(long = "swap-id")] @@ -75,6 +61,24 @@ pub enum Command { }, } +#[derive(structopt::StructOpt, Debug)] +pub struct ConnectParams { + #[structopt(long = "connect-peer-id", default_value = DEFAULT_ALICE_PEER_ID)] + pub alice_peer_id: PeerId, + + #[structopt( + long = "connect-addr", + default_value = DEFAULT_ALICE_MULTIADDR + )] + pub alice_addr: Multiaddr, +} + +#[derive(structopt::StructOpt, Debug)] +pub struct MoneroParams { + #[structopt(long = "receive-address", parse(try_from_str = parse_monero_address))] + pub receive_monero_address: monero::Address, +} + fn parse_monero_address(s: &str) -> Result { monero::Address::from_str(s).with_context(|| { format!(