Skip to content

Commit

Permalink
Merge pull request #147 from rainlanguage/2024-01-29-cli-refactoring-…
Browse files Browse the repository at this point in the history
…args

2024 01 29 cli refactoring args
  • Loading branch information
thedavidmeister authored Jan 31, 2024
2 parents dd7d1cf + 891ded7 commit 72ec6a3
Show file tree
Hide file tree
Showing 12 changed files with 134 additions and 160 deletions.
48 changes: 24 additions & 24 deletions crates/cli/src/commands/order/add.rs
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -9,40 +8,41 @@ use rain_orderbook_common::transaction::TransactionArgs;
use std::fs::read_to_string;
use std::path::PathBuf;

pub type AddOrder = CliTransactionCommandArgs<CliAddOrderArgs>;

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<CliAddOrderArgs> for AddOrderArgs {
impl TryFrom<CliOrderAddArgs> for AddOrderArgs {
type Error = anyhow::Error;

fn try_from(val: CliAddOrderArgs) -> Result<Self> {
fn try_from(val: CliOrderAddArgs) -> Result<Self> {
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(())
}
}
13 changes: 7 additions & 6 deletions crates/cli/src/commands/order/detail.rs
Original file line number Diff line number Diff line change
@@ -1,24 +1,25 @@
use crate::{execute::Execute, subgraph::CliSubgraphCommandArgs};
use crate::{execute::Execute, subgraph::CliSubgraphArgs};
use anyhow::Result;
use clap::Args;
use rain_orderbook_common::subgraph::SubgraphArgs;
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<CliOrderDetailArgs>;
#[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);

Expand Down
11 changes: 6 additions & 5 deletions crates/cli/src/commands/order/list.rs
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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<CliOrderListArgs>;
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?;
Expand Down
16 changes: 8 additions & 8 deletions crates/cli/src/commands/order/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
26 changes: 15 additions & 11 deletions crates/cli/src/commands/order/remove.rs
Original file line number Diff line number Diff line change
@@ -1,22 +1,32 @@
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;
use rain_orderbook_common::remove_order::RemoveOrderArgs;
use rain_orderbook_common::subgraph::SubgraphArgs;
use rain_orderbook_common::transaction::TransactionArgs;

pub type RemoveOrder = CliTransactionSubgraphCommandArgs<CliRemoveOrderArgs>;
#[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();

Expand All @@ -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,
}
54 changes: 27 additions & 27 deletions crates/cli/src/commands/vault/deposit.rs
Original file line number Diff line number Diff line change
@@ -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<CliDepositArgs>;
#[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<CliVaultDepositArgs> 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
Expand All @@ -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<CliDepositArgs> for DepositArgs {
fn from(val: CliDepositArgs) -> Self {
DepositArgs {
token: val.token,
vault_id: val.vault_id,
amount: val.amount,
}
}
}
13 changes: 7 additions & 6 deletions crates/cli/src/commands/vault/detail.rs
Original file line number Diff line number Diff line change
@@ -1,24 +1,25 @@
use crate::{execute::Execute, subgraph::CliSubgraphCommandArgs};
use crate::{execute::Execute, subgraph::CliSubgraphArgs};
use anyhow::Result;
use clap::Args;
use rain_orderbook_common::subgraph::SubgraphArgs;
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<CliVaultDetailArgs>;
#[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);

Expand Down
11 changes: 6 additions & 5 deletions crates/cli/src/commands/vault/list.rs
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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<CliVaultListArgs>;
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?;
Expand Down
16 changes: 8 additions & 8 deletions crates/cli/src/commands/vault/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
Loading

0 comments on commit 72ec6a3

Please sign in to comment.