diff --git a/crates/cli/src/commands/order/add.rs b/crates/cli/src/commands/order/add.rs index dfa2eb772..b4588a0f8 100644 --- a/crates/cli/src/commands/order/add.rs +++ b/crates/cli/src/commands/order/add.rs @@ -1,6 +1,5 @@ use crate::{ - execute::Execute, status::display_write_transaction_status, - transaction::CliTransactionCommandArgs, + execute::Execute, status::display_write_transaction_status, transaction::CliTransactionArgs, }; use anyhow::{anyhow, Result}; use clap::Args; @@ -9,40 +8,41 @@ use rain_orderbook_common::transaction::TransactionArgs; use std::fs::read_to_string; use std::path::PathBuf; -pub type AddOrder = CliTransactionCommandArgs; - -impl Execute for AddOrder { - async fn execute(&self) -> Result<()> { - let add_order_args: AddOrderArgs = self.cmd_args.clone().try_into()?; - let mut tx_args: TransactionArgs = self.transaction_args.clone().into(); - tx_args.try_fill_chain_id().await?; - - println!("----- Add Order -----"); - add_order_args - .execute(tx_args, |status| { - display_write_transaction_status(status); - }) - .await?; - - Ok(()) - } -} - #[derive(Args, Clone)] -pub struct CliAddOrderArgs { +pub struct CliOrderAddArgs { #[arg( short = 'f', long, help = "Path to the .rain file specifying the order" )] dotrain_file: PathBuf, + + #[clap(flatten)] + pub transaction_args: CliTransactionArgs, } -impl TryFrom for AddOrderArgs { +impl TryFrom for AddOrderArgs { type Error = anyhow::Error; - fn try_from(val: CliAddOrderArgs) -> Result { + fn try_from(val: CliOrderAddArgs) -> Result { let text = read_to_string(val.dotrain_file).map_err(|e| anyhow!(e))?; Ok(Self { dotrain: text }) } } + +impl Execute for CliOrderAddArgs { + async fn execute(&self) -> Result<()> { + let add_order_args: AddOrderArgs = self.clone().try_into()?; + let mut tx_args: TransactionArgs = self.transaction_args.clone().into(); + tx_args.try_fill_chain_id().await?; + + println!("----- Add Order -----"); + add_order_args + .execute(tx_args, |status| { + display_write_transaction_status(status); + }) + .await?; + + Ok(()) + } +} diff --git a/crates/cli/src/commands/order/detail.rs b/crates/cli/src/commands/order/detail.rs index 823e06555..06a769c88 100644 --- a/crates/cli/src/commands/order/detail.rs +++ b/crates/cli/src/commands/order/detail.rs @@ -1,4 +1,4 @@ -use crate::{execute::Execute, subgraph::CliSubgraphCommandArgs}; +use crate::{execute::Execute, subgraph::CliSubgraphArgs}; use anyhow::Result; use clap::Args; use rain_orderbook_common::subgraph::SubgraphArgs; @@ -6,19 +6,20 @@ use tracing::info; #[derive(Args, Clone)] pub struct CliOrderDetailArgs { - #[arg(short='i', long, help = "ID of the Order")] + #[arg(short = 'i', long, help = "ID of the Order")] order_id: String, -} -pub type Detail = CliSubgraphCommandArgs; + #[clap(flatten)] + pub subgraph_args: CliSubgraphArgs, +} -impl Execute for Detail { +impl Execute for CliOrderDetailArgs { async fn execute(&self) -> Result<()> { let subgraph_args: SubgraphArgs = self.subgraph_args.clone().into(); let order = subgraph_args .to_subgraph_client() .await? - .order(self.cmd_args.order_id.clone().into()) + .order(self.order_id.clone().into()) .await?; info!("{:#?}", order); diff --git a/crates/cli/src/commands/order/list.rs b/crates/cli/src/commands/order/list.rs index decc0ea01..62c211818 100644 --- a/crates/cli/src/commands/order/list.rs +++ b/crates/cli/src/commands/order/list.rs @@ -1,4 +1,4 @@ -use crate::{execute::Execute, subgraph::CliSubgraphCommandArgs}; +use crate::{execute::Execute, subgraph::CliSubgraphArgs}; use anyhow::{anyhow, Result}; use chrono::{NaiveDateTime, TimeZone, Utc}; use clap::Args; @@ -8,11 +8,12 @@ use rain_orderbook_subgraph_client::types::orders::Order; use tracing::debug; #[derive(Args, Clone)] -pub struct CliOrderListArgs {} - -pub type List = CliSubgraphCommandArgs; +pub struct CliOrderListArgs { + #[clap(flatten)] + pub subgraph_args: CliSubgraphArgs, +} -impl Execute for List { +impl Execute for CliOrderListArgs { async fn execute(&self) -> Result<()> { let subgraph_args: SubgraphArgs = self.subgraph_args.clone().into(); let orders = subgraph_args.to_subgraph_client().await?.orders().await?; diff --git a/crates/cli/src/commands/order/mod.rs b/crates/cli/src/commands/order/mod.rs index 4a0242a41..7c6730118 100644 --- a/crates/cli/src/commands/order/mod.rs +++ b/crates/cli/src/commands/order/mod.rs @@ -4,26 +4,26 @@ mod list; mod remove; use crate::execute::Execute; -use add::AddOrder; +use add::CliOrderAddArgs; use anyhow::Result; use clap::Parser; -use detail::Detail; -use list::List; -use remove::RemoveOrder; +use detail::CliOrderDetailArgs; +use list::CliOrderListArgs; +use remove::CliOrderRemoveArgs; #[derive(Parser)] pub enum Order { #[command(about = "List all Orders", alias = "ls")] - List(List), + List(CliOrderListArgs), #[command(about = "View an Order", alias = "view")] - Detail(Detail), + Detail(CliOrderDetailArgs), #[command(about = "Create an Order", alias = "add")] - Create(AddOrder), + Create(CliOrderAddArgs), #[command(about = "Remove an Order", alias = "rm")] - Remove(RemoveOrder), + Remove(CliOrderRemoveArgs), } impl Execute for Order { diff --git a/crates/cli/src/commands/order/remove.rs b/crates/cli/src/commands/order/remove.rs index 28389fd93..dd5285b6a 100644 --- a/crates/cli/src/commands/order/remove.rs +++ b/crates/cli/src/commands/order/remove.rs @@ -1,6 +1,6 @@ use crate::{ - execute::Execute, status::display_write_transaction_status, - transaction::CliTransactionSubgraphCommandArgs, + execute::Execute, status::display_write_transaction_status, subgraph::CliSubgraphArgs, + transaction::CliTransactionArgs, }; use anyhow::Result; use clap::Args; @@ -8,15 +8,25 @@ use rain_orderbook_common::remove_order::RemoveOrderArgs; use rain_orderbook_common::subgraph::SubgraphArgs; use rain_orderbook_common::transaction::TransactionArgs; -pub type RemoveOrder = CliTransactionSubgraphCommandArgs; +#[derive(Args, Clone)] +pub struct CliOrderRemoveArgs { + #[arg(short = 'i', long, help = "ID of the Order")] + order_id: String, + + #[clap(flatten)] + pub subgraph_args: CliSubgraphArgs, + + #[clap(flatten)] + pub transaction_args: CliTransactionArgs, +} -impl Execute for RemoveOrder { +impl Execute for CliOrderRemoveArgs { async fn execute(&self) -> Result<()> { let subgraph_args: SubgraphArgs = self.subgraph_args.clone().into(); let order = subgraph_args .to_subgraph_client() .await? - .order(self.cmd_args.order_id.clone().into()) + .order(self.order_id.clone().into()) .await?; let remove_order_args: RemoveOrderArgs = order.into(); @@ -33,9 +43,3 @@ impl Execute for RemoveOrder { Ok(()) } } - -#[derive(Args, Clone)] -pub struct CliRemoveOrderArgs { - #[arg(short='i', long, help = "ID of the Order")] - order_id: String, -} diff --git a/crates/cli/src/commands/vault/deposit.rs b/crates/cli/src/commands/vault/deposit.rs index a3e55e565..5fadabd97 100644 --- a/crates/cli/src/commands/vault/deposit.rs +++ b/crates/cli/src/commands/vault/deposit.rs @@ -1,19 +1,41 @@ use crate::{ - execute::Execute, status::display_write_transaction_status, - transaction::CliTransactionCommandArgs, + execute::Execute, status::display_write_transaction_status, transaction::CliTransactionArgs, }; use alloy_primitives::{Address, U256}; use anyhow::Result; use clap::Args; use rain_orderbook_common::{deposit::DepositArgs, transaction::TransactionArgs}; -pub type Deposit = CliTransactionCommandArgs; +#[derive(Args, Clone)] +pub struct CliVaultDepositArgs { + #[arg(short = 'i', long, help = "The ID of the vault")] + vault_id: U256, + + #[arg(short, long, help = "The token address in hex format")] + token: Address, + + #[arg(short, long, help = "The amount to deposit")] + amount: U256, + + #[clap(flatten)] + pub transaction_args: CliTransactionArgs, +} + +impl From for DepositArgs { + fn from(val: CliVaultDepositArgs) -> Self { + DepositArgs { + token: val.token, + vault_id: val.vault_id, + amount: val.amount, + } + } +} -impl Execute for Deposit { +impl Execute for CliVaultDepositArgs { async fn execute(&self) -> Result<()> { let mut tx_args: TransactionArgs = self.transaction_args.clone().into(); tx_args.try_fill_chain_id().await?; - let deposit_args: DepositArgs = self.cmd_args.clone().into(); + let deposit_args: DepositArgs = self.clone().into(); println!("----- Transaction (1/2): Approve ERC20 token spend -----"); deposit_args @@ -31,25 +53,3 @@ impl Execute for Deposit { Ok(()) } } - -#[derive(Args, Clone)] -pub struct CliDepositArgs { - #[arg(short, long, help = "The token address in hex format")] - token: Address, - - #[arg(short='i', long, help = "The ID of the vault")] - vault_id: U256, - - #[arg(short, long, help = "The amount to deposit")] - amount: U256, -} - -impl From for DepositArgs { - fn from(val: CliDepositArgs) -> Self { - DepositArgs { - token: val.token, - vault_id: val.vault_id, - amount: val.amount, - } - } -} diff --git a/crates/cli/src/commands/vault/detail.rs b/crates/cli/src/commands/vault/detail.rs index 6a1ee909a..cea733754 100644 --- a/crates/cli/src/commands/vault/detail.rs +++ b/crates/cli/src/commands/vault/detail.rs @@ -1,4 +1,4 @@ -use crate::{execute::Execute, subgraph::CliSubgraphCommandArgs}; +use crate::{execute::Execute, subgraph::CliSubgraphArgs}; use anyhow::Result; use clap::Args; use rain_orderbook_common::subgraph::SubgraphArgs; @@ -6,19 +6,20 @@ use tracing::info; #[derive(Args, Clone)] pub struct CliVaultDetailArgs { - #[arg(short='i', long, help = "ID of the Vault")] + #[arg(short = 'i', long, help = "ID of the Vault")] vault_id: String, -} -pub type Detail = CliSubgraphCommandArgs; + #[clap(flatten)] + pub subgraph_args: CliSubgraphArgs, +} -impl Execute for Detail { +impl Execute for CliVaultDetailArgs { async fn execute(&self) -> Result<()> { let subgraph_args: SubgraphArgs = self.subgraph_args.clone().into(); let vault = subgraph_args .to_subgraph_client() .await? - .vault(self.cmd_args.vault_id.clone().into()) + .vault(self.vault_id.clone().into()) .await?; info!("{:#?}", vault); diff --git a/crates/cli/src/commands/vault/list.rs b/crates/cli/src/commands/vault/list.rs index d698f1894..624850644 100644 --- a/crates/cli/src/commands/vault/list.rs +++ b/crates/cli/src/commands/vault/list.rs @@ -1,4 +1,4 @@ -use crate::{execute::Execute, subgraph::CliSubgraphCommandArgs}; +use crate::{execute::Execute, subgraph::CliSubgraphArgs}; use anyhow::Result; use clap::Args; use comfy_table::Table; @@ -7,11 +7,12 @@ use rain_orderbook_subgraph_client::types::vaults::TokenVault; use tracing::debug; #[derive(Args, Clone)] -pub struct CliVaultListArgs {} - -pub type List = CliSubgraphCommandArgs; +pub struct CliVaultListArgs { + #[clap(flatten)] + pub subgraph_args: CliSubgraphArgs, +} -impl Execute for List { +impl Execute for CliVaultListArgs { async fn execute(&self) -> Result<()> { let subgraph_args: SubgraphArgs = self.subgraph_args.clone().into(); let vaults = subgraph_args.to_subgraph_client().await?.vaults().await?; diff --git a/crates/cli/src/commands/vault/mod.rs b/crates/cli/src/commands/vault/mod.rs index f0ce8cf6b..8928d6013 100644 --- a/crates/cli/src/commands/vault/mod.rs +++ b/crates/cli/src/commands/vault/mod.rs @@ -6,24 +6,24 @@ mod withdraw; use crate::execute::Execute; use anyhow::Result; use clap::Parser; -use deposit::Deposit; -use detail::Detail; -use list::List; -use withdraw::Withdraw; +use deposit::CliVaultDepositArgs; +use detail::CliVaultDetailArgs; +use list::CliVaultListArgs; +use withdraw::CliVaultWithdrawArgs; #[derive(Parser)] pub enum Vault { #[command(about = "Deposit tokens into a Vault")] - Deposit(Deposit), + Deposit(CliVaultDepositArgs), #[command(about = "Withdraw tokens from a Vault")] - Withdraw(Withdraw), + Withdraw(CliVaultWithdrawArgs), #[command(about = "List all Vaults", alias = "ls")] - List(List), + List(CliVaultListArgs), #[command(about = "View a Vault", alias = "view")] - Detail(Detail), + Detail(CliVaultDetailArgs), } impl Execute for Vault { diff --git a/crates/cli/src/commands/vault/withdraw.rs b/crates/cli/src/commands/vault/withdraw.rs index 69e145db3..7869cab64 100644 --- a/crates/cli/src/commands/vault/withdraw.rs +++ b/crates/cli/src/commands/vault/withdraw.rs @@ -1,43 +1,28 @@ use crate::status::display_write_transaction_status; -use crate::{execute::Execute, transaction::CliTransactionCommandArgs}; +use crate::{execute::Execute, transaction::CliTransactionArgs}; use alloy_primitives::{Address, U256}; use anyhow::Result; use clap::Args; use rain_orderbook_common::transaction::TransactionArgs; use rain_orderbook_common::withdraw::WithdrawArgs; -pub type Withdraw = CliTransactionCommandArgs; - -impl Execute for Withdraw { - async fn execute(&self) -> Result<()> { - let mut tx_args: TransactionArgs = self.transaction_args.clone().into(); - tx_args.try_fill_chain_id().await?; - let withdraw_args: WithdrawArgs = self.cmd_args.clone().into(); - - println!("----- Withdraw tokens from Vault -----"); - withdraw_args - .execute(tx_args, |status| { - display_write_transaction_status(status); - }) - .await?; - Ok(()) - } -} - #[derive(Args, Clone)] -pub struct CliWithdrawArgs { +pub struct CliVaultWithdrawArgs { + #[arg(short = 'i', long, help = "The ID of the vault")] + vault_id: U256, + #[arg(short, long, help = "The token address in hex format")] token: Address, - #[arg(short='i', long, help = "The ID of the vault")] - vault_id: U256, - #[arg(short = 'a', long, help = "The target amount to withdraw")] target_amount: U256, + + #[clap(flatten)] + pub transaction_args: CliTransactionArgs, } -impl From for WithdrawArgs { - fn from(val: CliWithdrawArgs) -> Self { +impl From for WithdrawArgs { + fn from(val: CliVaultWithdrawArgs) -> Self { WithdrawArgs { token: val.token, vault_id: val.vault_id, @@ -45,3 +30,19 @@ impl From for WithdrawArgs { } } } + +impl Execute for CliVaultWithdrawArgs { + async fn execute(&self) -> Result<()> { + let mut tx_args: TransactionArgs = self.transaction_args.clone().into(); + tx_args.try_fill_chain_id().await?; + let withdraw_args: WithdrawArgs = self.clone().into(); + + println!("----- Withdraw tokens from Vault -----"); + withdraw_args + .execute(tx_args, |status| { + display_write_transaction_status(status); + }) + .await?; + Ok(()) + } +} diff --git a/crates/cli/src/subgraph.rs b/crates/cli/src/subgraph.rs index a1177dbbc..6e1056484 100644 --- a/crates/cli/src/subgraph.rs +++ b/crates/cli/src/subgraph.rs @@ -1,6 +1,4 @@ use clap::Args; -use clap::FromArgMatches; -use clap::Parser; use rain_orderbook_common::subgraph::SubgraphArgs; #[derive(Args, Clone)] @@ -20,12 +18,3 @@ impl From for SubgraphArgs { } } } - -#[derive(Parser, Clone)] -pub struct CliSubgraphCommandArgs { - #[clap(flatten)] - pub cmd_args: T, - - #[clap(flatten)] - pub subgraph_args: CliSubgraphArgs, -} diff --git a/crates/cli/src/transaction.rs b/crates/cli/src/transaction.rs index b93a7f60d..435ca9fde 100644 --- a/crates/cli/src/transaction.rs +++ b/crates/cli/src/transaction.rs @@ -1,8 +1,5 @@ -use crate::subgraph::CliSubgraphArgs; use alloy_primitives::{Address, U256}; use clap::Args; -use clap::FromArgMatches; -use clap::Parser; use rain_orderbook_common::transaction::TransactionArgs; #[derive(Args, Clone)] @@ -43,24 +40,3 @@ impl From for TransactionArgs { } } } - -#[derive(Parser, Clone)] -pub struct CliTransactionCommandArgs { - #[clap(flatten)] - pub cmd_args: T, - - #[clap(flatten)] - pub transaction_args: CliTransactionArgs, -} - -#[derive(Parser, Clone)] -pub struct CliTransactionSubgraphCommandArgs { - #[clap(flatten)] - pub cmd_args: T, - - #[clap(flatten)] - pub transaction_args: CliTransactionArgs, - - #[clap(flatten)] - pub subgraph_args: CliSubgraphArgs, -}