wip: remove Request struct, imports failing

This commit is contained in:
binarybaron 2024-08-09 12:42:22 +02:00
parent 693f4297c5
commit b769251665
No known key found for this signature in database
GPG key ID: 99B75D3E1476A26E
3 changed files with 166 additions and 123 deletions

View file

@ -290,7 +290,10 @@ pub async fn get_swap_info(
} }
#[tracing::instrument(fields(method = "buy_xmr"), skip(context))] #[tracing::instrument(fields(method = "buy_xmr"), skip(context))]
pub async fn buy_xmr(buy_xmr: BuyXmrArgs, context: Arc<Context>) -> Result<serde_json::Value> { pub async fn buy_xmr(
buy_xmr: BuyXmrArgs,
context: Arc<Context>,
) -> Result<serde_json::Value, anyhow::Error> {
let BuyXmrArgs { let BuyXmrArgs {
seller, seller,
bitcoin_change_address, bitcoin_change_address,

View file

@ -21,19 +21,18 @@ use std::env;
#[tokio::main] #[tokio::main]
pub async fn main() -> Result<()> { pub async fn main() -> Result<()> {
let (context, request) = match parse_args_and_apply_defaults(env::args_os()).await? { if let Err(e) = check_latest_version(env!("CARGO_PKG_VERSION")).await {
ParseResult::Context(context, request) => (context, request), eprintln!("{}", e);
}
match parse_args_and_apply_defaults(env::args_os()).await? {
ParseResult::Success => {}
ParseResult::PrintAndExitZero { message } => { ParseResult::PrintAndExitZero { message } => {
println!("{}", message); println!("{}", message);
std::process::exit(0); std::process::exit(0);
} }
}; };
if let Err(e) = check_latest_version(env!("CARGO_PKG_VERSION")).await {
eprintln!("{}", e);
}
request.call(context.clone()).await?;
context.tasks.wait_for_tasks().await?;
Ok(()) Ok(())
} }

View file

@ -1,6 +1,8 @@
use crate::api::request::{ use crate::api::request::{
BalanceArgs, BuyXmrArgs, CancelAndRefundArgs, ListSellersArgs, Method, MoneroRecoveryArgs, buy_xmr, cancel_and_refund, export_bitcoin_wallet, get_balance, get_config, get_history,
Request, ResumeArgs, StartDaemonArgs, WithdrawBtcArgs, list_sellers, monero_recovery, resume_swap, start_daemon, withdraw_btc, BalanceArgs,
BuyXmrArgs, CancelAndRefundArgs, ListSellersArgs, Method, MoneroRecoveryArgs, Request,
ResumeArgs, StartDaemonArgs, WithdrawBtcArgs,
}; };
use crate::api::Context; use crate::api::Context;
use crate::bitcoin::{bitcoin_address, Amount}; use crate::bitcoin::{bitcoin_address, Amount};
@ -8,6 +10,7 @@ use crate::monero;
use crate::monero::monero_address; use crate::monero::monero_address;
use anyhow::Result; use anyhow::Result;
use libp2p::core::Multiaddr; use libp2p::core::Multiaddr;
use serde_json::Value;
use std::ffi::OsString; use std::ffi::OsString;
use std::net::SocketAddr; use std::net::SocketAddr;
use std::path::PathBuf; use std::path::PathBuf;
@ -36,7 +39,7 @@ const DEFAULT_TOR_SOCKS5_PORT: &str = "9050";
#[derive(Debug)] #[derive(Debug)]
pub enum ParseResult { pub enum ParseResult {
/// The arguments we were invoked in. /// The arguments we were invoked in.
Context(Arc<Context>, Box<Request>), Success,
/// A flag or command was given that does not need further processing other /// A flag or command was given that does not need further processing other
/// than printing the provided message. /// than printing the provided message.
/// ///
@ -63,7 +66,7 @@ where
let json = args.json; let json = args.json;
let is_testnet = args.testnet; let is_testnet = args.testnet;
let data = args.data; let data = args.data;
let (context, request) = match args.cmd { let result = match args.cmd {
CliCommand::BuyXmr { CliCommand::BuyXmr {
seller: Seller { seller }, seller: Seller { seller },
bitcoin, bitcoin,
@ -77,57 +80,75 @@ where
let bitcoin_change_address = let bitcoin_change_address =
bitcoin_address::validate_is_testnet(bitcoin_change_address, is_testnet)?; bitcoin_address::validate_is_testnet(bitcoin_change_address, is_testnet)?;
let request = Request::new(Method::BuyXmr(BuyXmrArgs { let context = Arc::new(
seller, Context::build(
bitcoin_change_address, Some(bitcoin),
monero_receive_address, Some(monero),
swap_id: Uuid::new_v4(), Some(tor),
})); data,
is_testnet,
debug,
json,
None,
)
.await?,
);
let context = Context::build( buy_xmr(
Some(bitcoin), BuyXmrArgs {
Some(monero), seller,
Some(tor), bitcoin_change_address,
data, monero_receive_address,
is_testnet, swap_id: Uuid::new_v4(),
debug, },
json, context,
None,
) )
.await?; .await?;
(context, request)
Ok(()) as Result<(), anyhow::Error>
} }
CliCommand::History => { CliCommand::History => {
let request = Request::new(Method::History); let context = Arc::new(
Context::build(None, None, None, data, is_testnet, debug, json, None).await?,
);
let context = get_history(context).await?;
Context::build(None, None, None, data, is_testnet, debug, json, None).await?;
(context, request) Ok(())
} }
CliCommand::Config => { CliCommand::Config => {
let request = Request::new(Method::Config); let context = Arc::new(
Context::build(None, None, None, data, is_testnet, debug, json, None).await?,
);
let context = get_config(context).await?;
Context::build(None, None, None, data, is_testnet, debug, json, None).await?;
(context, request) Ok(())
} }
CliCommand::Balance { bitcoin } => { CliCommand::Balance { bitcoin } => {
let request = Request::new(Method::Balance(BalanceArgs { let context = Arc::new(
force_refresh: true, Context::build(
})); Some(bitcoin),
None,
None,
data,
is_testnet,
debug,
json,
None,
)
.await?,
);
let context = Context::build( get_balance(
Some(bitcoin), BalanceArgs {
None, force_refresh: true,
None, },
data, context,
is_testnet,
debug,
json,
None,
) )
.await?; .await?;
(context, request)
Ok(())
} }
CliCommand::StartDaemon { CliCommand::StartDaemon {
server_address, server_address,
@ -135,20 +156,23 @@ where
monero, monero,
tor, tor,
} => { } => {
let request = Request::new(Method::StartDaemon(StartDaemonArgs { server_address })); let context = Arc::new(
Context::build(
Some(bitcoin),
Some(monero),
Some(tor),
data,
is_testnet,
debug,
json,
server_address,
)
.await?,
);
let context = Context::build( start_daemon(StartDaemonArgs { server_address }, context).await?;
Some(bitcoin),
Some(monero), Ok(())
Some(tor),
data,
is_testnet,
debug,
json,
server_address,
)
.await?;
(context, request)
} }
CliCommand::WithdrawBtc { CliCommand::WithdrawBtc {
bitcoin, bitcoin,
@ -156,20 +180,24 @@ where
address, address,
} => { } => {
let address = bitcoin_address::validate_is_testnet(address, is_testnet)?; let address = bitcoin_address::validate_is_testnet(address, is_testnet)?;
let request = Request::new(Method::WithdrawBtc(WithdrawBtcArgs { amount, address }));
let context = Context::build( let context = Arc::new(
Some(bitcoin), Context::build(
None, Some(bitcoin),
None, None,
data, None,
is_testnet, data,
debug, is_testnet,
json, debug,
None, json,
) None,
.await?; )
(context, request) .await?,
);
withdraw_btc(WithdrawBtcArgs { amount, address }, context).await?;
Ok(())
} }
CliCommand::Resume { CliCommand::Resume {
swap_id: SwapId { swap_id }, swap_id: SwapId { swap_id },
@ -177,81 +205,94 @@ where
monero, monero,
tor, tor,
} => { } => {
let request = Request::new(Method::Resume(ResumeArgs { swap_id })); let context = Arc::new(
Context::build(
Some(bitcoin),
Some(monero),
Some(tor),
data,
is_testnet,
debug,
json,
None,
)
.await?,
);
let context = Context::build( resume_swap(ResumeArgs { swap_id }, context).await?;
Some(bitcoin),
Some(monero), Ok(())
Some(tor),
data,
is_testnet,
debug,
json,
None,
)
.await?;
(context, request)
} }
CliCommand::CancelAndRefund { CliCommand::CancelAndRefund {
swap_id: SwapId { swap_id }, swap_id: SwapId { swap_id },
bitcoin, bitcoin,
tor, tor,
} => { } => {
let request = Request::new(Method::CancelAndRefund(CancelAndRefundArgs { swap_id })); let context = Arc::new(
Context::build(
Some(bitcoin),
None,
Some(tor),
data,
is_testnet,
debug,
json,
None,
)
.await?,
);
let context = Context::build( cancel_and_refund(CancelAndRefundArgs { swap_id }, context).await?;
Some(bitcoin),
None, Ok(())
Some(tor),
data,
is_testnet,
debug,
json,
None,
)
.await?;
(context, request)
} }
CliCommand::ListSellers { CliCommand::ListSellers {
rendezvous_point, rendezvous_point,
tor, tor,
} => { } => {
let request = Request::new(Method::ListSellers(ListSellersArgs { rendezvous_point })); let context = Arc::new(
Context::build(None, None, Some(tor), data, is_testnet, debug, json, None).await?,
);
let context = list_sellers(ListSellersArgs { rendezvous_point }, context).await?;
Context::build(None, None, Some(tor), data, is_testnet, debug, json, None).await?;
(context, request) Ok(())
} }
CliCommand::ExportBitcoinWallet { bitcoin } => { CliCommand::ExportBitcoinWallet { bitcoin } => {
let request = Request::new(Method::ExportBitcoinWallet); let context = Arc::new(
Context::build(
Some(bitcoin),
None,
None,
data,
is_testnet,
debug,
json,
None,
)
.await?,
);
let context = Context::build( export_bitcoin_wallet(context).await?;
Some(bitcoin),
None, Ok(())
None,
data,
is_testnet,
debug,
json,
None,
)
.await?;
(context, request)
} }
CliCommand::MoneroRecovery { CliCommand::MoneroRecovery {
swap_id: SwapId { swap_id }, swap_id: SwapId { swap_id },
} => { } => {
let request = Request::new(Method::MoneroRecovery(MoneroRecoveryArgs { swap_id })); let context = Arc::new(
Context::build(None, None, None, data, is_testnet, debug, json, None).await?,
);
let context = monero_recovery(MoneroRecoveryArgs { swap_id }, context).await?;
Context::build(None, None, None, data, is_testnet, debug, json, None).await?;
(context, request) Ok(())
} }
}; };
Ok(ParseResult::Context(Arc::new(context), Box::new(request))) result?;
Ok(ParseResult::Success)
} }
#[derive(structopt::StructOpt, Debug)] #[derive(structopt::StructOpt, Debug)]