Skip to content

Commit

Permalink
Merge pull request #187 from rainlanguage/2024-02-06-frontmatter-keba…
Browse files Browse the repository at this point in the history
…b-case

chore: change frontmatter keys from camelCase to kebab-case
  • Loading branch information
thedavidmeister authored Feb 7, 2024
2 parents b4ae5be + 6bf7db9 commit fecb698
Show file tree
Hide file tree
Showing 10 changed files with 162 additions and 125 deletions.
53 changes: 16 additions & 37 deletions crates/cli/src/commands/order/list.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,12 @@ use crate::{
execute::Execute,
subgraph::{CliPaginationArgs, CliSubgraphArgs},
};
use anyhow::{anyhow, Result};
use chrono::{NaiveDateTime, TimeZone, Utc};
use anyhow::Result;
use clap::Args;
use comfy_table::Table;
use rain_orderbook_common::subgraph::SubgraphArgs;
use rain_orderbook_subgraph_client::{
types::{flattened::OrderFlattened, orders_list::Order},
types::flattened::{OrderFlattened, TryIntoFlattenedError},
PaginationArgs, WriteCsv,
};
use tracing::info;
Expand All @@ -36,66 +35,46 @@ impl Execute for CliOrderListArgs {
.await?
.orders_list(pagination_args)
.await?;
let orders_flattened: Vec<OrderFlattened> =
orders
.into_iter()
.map(|o| o.try_into())
.collect::<Result<Vec<OrderFlattened>, TryIntoFlattenedError>>()?;

if let Some(csv_file) = self.csv_file.clone() {
let orders_flattened: Vec<OrderFlattened> =
orders.into_iter().map(|o| o.into()).collect();
orders_flattened.write_csv(csv_file.clone())?;
info!("Saved to CSV at {:?}", canonicalize(csv_file.as_path())?);
} else {
let table = build_table(orders)?;
let table = build_table(orders_flattened)?;
info!("\n{}", table);
}

Ok(())
}
}

fn build_table(orders: Vec<Order>) -> Result<Table> {
fn build_table(orders: Vec<OrderFlattened>) -> Result<Table> {
let mut table = comfy_table::Table::new();
table
.load_preset(comfy_table::presets::UTF8_FULL)
.set_content_arrangement(comfy_table::ContentArrangement::Dynamic)
.set_header(vec![
"Order ID",
"Added At (UTC)",
"Added At",
"Active",
"Owner",
"Input Tokens",
"Output Tokens",
]);

for order in orders.iter() {
let timestamp_i64 = order.timestamp.0.parse::<i64>()?;
let timestamp_naive = NaiveDateTime::from_timestamp_opt(timestamp_i64, 0)
.ok_or(anyhow!("Failed to parse timestamp into NaiveDateTime"))?;
let timestamp_utc = Utc.from_utc_datetime(&timestamp_naive);

for order in orders.into_iter() {
table.add_row(vec![
order.id.inner().into(),
format!("{}", timestamp_utc.format("%Y-%m-%d %H:%M:%S")),
order.id,
order.timestamp_display,
format!("{}", order.order_active),
format!("{}", order.owner.id.0),
order
.valid_inputs
.clone()
.map_or("".into(), |valid_inputs| {
valid_inputs
.into_iter()
.map(|v| v.token.symbol)
.collect::<Vec<String>>()
.join(", ")
}),
order
.valid_outputs
.clone()
.map_or("".into(), |valid_outputs| {
valid_outputs
.into_iter()
.map(|v| v.token.symbol)
.collect::<Vec<String>>()
.join(", ")
}),
format!("{}", order.owner.0),
order.valid_inputs_token_symbols_display,
order.valid_outputs_token_symbols_display,
]);
}

Expand Down
60 changes: 18 additions & 42 deletions crates/cli/src/commands/vault/list_balance_changes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,12 @@ use crate::{
execute::Execute,
subgraph::{CliPaginationArgs, CliSubgraphArgs},
};
use anyhow::{anyhow, Result};
use chrono::{NaiveDateTime, TimeZone, Utc};
use anyhow::Result;
use clap::Args;
use comfy_table::Table;
use rain_orderbook_common::subgraph::SubgraphArgs;
use rain_orderbook_subgraph_client::{
types::{flattened::VaultBalanceChangeFlattened, vault_balance_change::VaultBalanceChange},
types::flattened::{TryIntoFlattenedError, VaultBalanceChangeFlattened},
PaginationArgs, WriteCsv,
};
use tracing::info;
Expand Down Expand Up @@ -39,68 +38,45 @@ impl Execute for CliVaultListBalanceChanges {
.await?
.vault_list_balance_changes(self.vault_id.clone().into(), pagination_args)
.await?;
let vault_balance_changes_flattened: Vec<VaultBalanceChangeFlattened> =
vault_balance_changes
.into_iter()
.map(|o| o.try_into())
.collect::<Result<Vec<VaultBalanceChangeFlattened>, TryIntoFlattenedError>>()?;

if let Some(csv_file) = self.csv_file.clone() {
let vault_balance_changes_flattened: Vec<VaultBalanceChangeFlattened> =
vault_balance_changes
.into_iter()
.map(|o| o.into())
.collect();
vault_balance_changes_flattened.write_csv(csv_file.clone())?;
info!("Saved to CSV at {:?}", canonicalize(csv_file.as_path())?);
} else {
let table = build_table(vault_balance_changes)?;
let table = build_table(vault_balance_changes_flattened)?;
info!("\n{}", table);
}

Ok(())
}
}

fn build_table(balance_change: Vec<VaultBalanceChange>) -> Result<Table> {
fn build_table(balance_change: Vec<VaultBalanceChangeFlattened>) -> Result<Table> {
let mut table = comfy_table::Table::new();
table
.load_preset(comfy_table::presets::UTF8_FULL)
.set_content_arrangement(comfy_table::ContentArrangement::Dynamic)
.set_header(vec![
"ID",
"Changed At (UTC)",
"Changed At",
"Sender",
"Balance Change",
"Change Type",
]);

for balance_change in balance_change.iter() {
match balance_change {
VaultBalanceChange::Withdraw(w) => {
let timestamp_i64 = w.timestamp.0.parse::<i64>()?;
let timestamp_naive = NaiveDateTime::from_timestamp_opt(timestamp_i64, 0)
.ok_or(anyhow!("Failed to parse timestamp into NaiveDateTime"))?;
let timestamp_utc = Utc.from_utc_datetime(&timestamp_naive);

table.add_row(vec![
format!("{}", w.id.clone().into_inner()),
format!("{}", timestamp_utc.format("%Y-%m-%d %H:%M:%S")),
format!("{}", w.sender.id.clone().0),
format!("-{}", w.amount_display.0),
"Withdraw".to_string(),
]);
}
VaultBalanceChange::Deposit(d) => {
let timestamp_i64 = d.timestamp.0.parse::<i64>()?;
let timestamp_naive = NaiveDateTime::from_timestamp_opt(timestamp_i64, 0)
.ok_or(anyhow!("Failed to parse timestamp into NaiveDateTime"))?;
let timestamp_utc = Utc.from_utc_datetime(&timestamp_naive);

table.add_row(vec![
format!("{}", d.id.clone().into_inner()),
format!("{}", timestamp_utc.format("%Y-%m-%d %H:%M:%S")),
format!("{}", d.sender.id.clone().0),
format!("{}", d.amount_display.0),
"Deposit".to_string(),
]);
}
};
for balance_change in balance_change.into_iter() {
table.add_row(vec![
balance_change.id,
balance_change.timestamp_display,
balance_change.sender.0,
balance_change.amount_display_signed,
balance_change.change_type_display,
]);
}

Ok(table)
Expand Down
34 changes: 17 additions & 17 deletions crates/common/src/add_order.rs
Original file line number Diff line number Diff line change
Expand Up @@ -55,14 +55,14 @@ pub struct AddOrderArgs {
/// orderbook:
/// order:
/// deployer: 0x1111111111111111111111111111111111111111
/// validInputs:
/// valid-inputs:
/// - address: 0x2222222222222222222222222222222222222222
/// decimals: 18
/// vaultId: 0x1234
/// validOutputs:
/// vault-id: 0x1234
/// valid-outputs:
/// - address: 0x5555555555555555555555555555555555555555
/// decimals: 8
/// vaultId: 0x5678
/// vault-id: 0x5678
/// ```
///
/// Text MUST have valid dotrain body succeding frontmatter.
Expand All @@ -71,7 +71,7 @@ pub struct AddOrderArgs {
}

impl AddOrderArgs {
/// Parse an Io array from from frontmatter field (i.e. validInputs or validOutputs)
/// Parse an Io array from from frontmatter field (i.e. valid-inputs or valid-outputs)
pub(crate) fn try_parse_frontmatter_io(
io_yamls: StrictYaml,
io_field_name: &str,
Expand Down Expand Up @@ -111,16 +111,16 @@ impl AddOrderArgs {
io_field_name
))
})?,
vaultId: io_yaml["vaultId"]
vaultId: io_yaml["vault-id"]
.as_str()
.ok_or(AddOrderArgsError::FrontmatterFieldMissing(format!(
"orderbook.order.{}.vault",
"orderbook.order.{}.vault-id",
io_field_name
)))?
.parse::<U256>()
.map_err(|_| {
AddOrderArgsError::FrontmatterFieldInvalid(format!(
"orderbook.order.{}.vault",
"orderbook.order.{}.vault-id",
io_field_name
))
})?,
Expand All @@ -129,7 +129,7 @@ impl AddOrderArgs {
.collect::<Result<Vec<IO>, AddOrderArgsError>>()
}

/// Parse dotrain frontmatter to extract deployer, validInputs and validOutputs
/// Parse dotrain frontmatter to extract deployer, valid-inputs and valid-outputs
pub(crate) fn try_parse_frontmatter(
frontmatter: &str,
) -> Result<(Address, Vec<IO>, Vec<IO>), AddOrderArgsError> {
Expand All @@ -148,12 +148,12 @@ impl AddOrderArgs {
})?;

let valid_inputs: Vec<IO> = Self::try_parse_frontmatter_io(
frontmatter_yaml[0]["orderbook"]["order"]["validInputs"].clone(),
"validInputs",
frontmatter_yaml[0]["orderbook"]["order"]["valid-inputs"].clone(),
"valid-inputs",
)?;
let valid_outputs: Vec<IO> = Self::try_parse_frontmatter_io(
frontmatter_yaml[0]["orderbook"]["order"]["validOutputs"].clone(),
"validOutputs",
frontmatter_yaml[0]["orderbook"]["order"]["valid-outputs"].clone(),
"valid-outputs",
)?;

Ok((deployer, valid_inputs, valid_outputs))
Expand Down Expand Up @@ -258,14 +258,14 @@ mod tests {
orderbook:
order:
deployer: 0x1111111111111111111111111111111111111111
validInputs:
valid-inputs:
- token: 0x0000000000000000000000000000000000000001
decimals: 18
vaultId: 0x1
validOutputs:
vault-id: 0x1
valid-outputs:
- token: 0x0000000000000000000000000000000000000002
decimals: 18
vaultId: 0x2
vault-id: 0x2
";

let (deployer, valid_inputs, valid_outputs) =
Expand Down
Loading

0 comments on commit fecb698

Please sign in to comment.