Remove parameter duplication by introducing structs

This commit is contained in:
Daniel Karzel 2021-03-05 16:00:52 +11:00
parent c826a28911
commit f091402c7a
2 changed files with 43 additions and 29 deletions

View File

@ -20,7 +20,7 @@ use std::sync::Arc;
use std::time::Duration; use std::time::Duration;
use structopt::StructOpt; use structopt::StructOpt;
use swap::bitcoin::{Amount, TxLock}; 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::cli::config::{read_config, Config};
use swap::database::Database; use swap::database::Database;
use swap::execution_params::GetExecutionParams; use swap::execution_params::GetExecutionParams;
@ -84,9 +84,14 @@ async fn main() -> Result<()> {
match args.cmd { match args.cmd {
Command::BuyXmr { Command::BuyXmr {
receive_monero_address, connect_params:
alice_peer_id, ConnectParams {
alice_addr, alice_peer_id,
alice_addr,
},
monero_params: MoneroParams {
receive_monero_address,
},
} => { } => {
if receive_monero_address.network != monero_network { if receive_monero_address.network != monero_network {
bail!( bail!(
@ -159,10 +164,15 @@ async fn main() -> Result<()> {
table.printstd(); table.printstd();
} }
Command::Resume { Command::Resume {
receive_monero_address,
swap_id, swap_id,
alice_peer_id, connect_params:
alice_addr, ConnectParams {
alice_peer_id,
alice_addr,
},
monero_params: MoneroParams {
receive_monero_address,
},
} => { } => {
if receive_monero_address.network != monero_network { 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) bail!("The given monero address is on network {:?}, expected address of network {:?}.", receive_monero_address.network, monero_network)

View File

@ -28,36 +28,22 @@ pub struct Arguments {
#[structopt(name = "xmr_btc-swap", about = "XMR BTC atomic swap")] #[structopt(name = "xmr_btc-swap", about = "XMR BTC atomic swap")]
pub enum Command { pub enum Command {
BuyXmr { BuyXmr {
#[structopt(long = "receive-address", parse(try_from_str = parse_monero_address))] #[structopt(flatten)]
receive_monero_address: monero::Address, connect_params: ConnectParams,
#[structopt(long = "connect-peer-id", default_value = DEFAULT_ALICE_PEER_ID)] #[structopt(flatten)]
alice_peer_id: PeerId, monero_params: MoneroParams,
#[structopt(
long = "connect-addr",
default_value = DEFAULT_ALICE_MULTIADDR
)]
alice_addr: Multiaddr,
}, },
History, History,
Resume { Resume {
#[structopt(long = "receive-address", parse(try_from_str = parse_monero_address))]
receive_monero_address: monero::Address,
#[structopt(long = "swap-id")] #[structopt(long = "swap-id")]
swap_id: Uuid, swap_id: Uuid,
// TODO: Remove Alice peer-id/address, it should be saved in the database when running swap #[structopt(flatten)]
// and loaded from the database when running resume/cancel/refund connect_params: ConnectParams,
#[structopt(long = "counterpart-peer-id", default_value = DEFAULT_ALICE_PEER_ID)]
alice_peer_id: PeerId,
#[structopt( #[structopt(flatten)]
long = "counterpart-addr", monero_params: MoneroParams,
default_value = DEFAULT_ALICE_MULTIADDR
)]
alice_addr: Multiaddr,
}, },
Cancel { Cancel {
#[structopt(long = "swap-id")] #[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> { fn parse_monero_address(s: &str) -> Result<monero::Address> {
monero::Address::from_str(s).with_context(|| { monero::Address::from_str(s).with_context(|| {
format!( format!(