Skip to content

Commit ae280c7

Browse files
committed
add final balance parsing and fix gh workflow
1 parent 4373cfd commit ae280c7

File tree

2 files changed

+56
-4
lines changed

2 files changed

+56
-4
lines changed

src/utils/txn_parser/get_balance_changes.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ fn compute_balance_change(node: &NormalizedNode) -> XRPLUtilsResult<Option<BigDe
4848
mod test {
4949
use core::cell::LazyCell;
5050

51-
use alloc::dbg;
5251
use serde_json::Value;
5352

5453
use super::*;
@@ -59,13 +58,11 @@ mod test {
5958
let txn: LazyCell<TransactionMetadata> = LazyCell::new(|| {
6059
let txn_value: Value =
6160
serde_json::from_str(include_str!("./test_data/payment_iou.json")).unwrap();
62-
dbg!(&txn_value);
6361
let txn_meta = txn_value["meta"].clone();
64-
dbg!(&txn_meta);
6562
let txn_meta: TransactionMetadata = serde_json::from_value(txn_meta).unwrap();
6663

6764
txn_meta
6865
});
69-
dbg!(get_balance_changes(&txn).unwrap());
66+
assert!(get_balance_changes(&txn).is_ok());
7067
}
7168
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
use super::utils::{
2+
balance_parser::derive_account_balances, nodes::NormalizedNode, parser::get_value,
3+
AccountBalances,
4+
};
5+
use crate::{
6+
models::transactions::metadata::TransactionMetadata, utils::exceptions::XRPLUtilsResult,
7+
};
8+
use alloc::vec::Vec;
9+
use bigdecimal::BigDecimal;
10+
11+
pub fn get_final_balances<'a: 'b, 'b>(
12+
metadata: &'a TransactionMetadata<'a>,
13+
) -> XRPLUtilsResult<Vec<AccountBalances<'b>>> {
14+
derive_account_balances(metadata, compute_final_balance)
15+
}
16+
17+
fn compute_final_balance(node: &NormalizedNode) -> XRPLUtilsResult<Option<BigDecimal>> {
18+
let mut value: BigDecimal = BigDecimal::from(0);
19+
if let Some(new_fields) = &node.new_fields {
20+
if let Some(balance) = &new_fields.balance {
21+
value = get_value(&balance.clone().into())?;
22+
}
23+
} else if let Some(final_fields) = &node.final_fields {
24+
if let Some(balance) = &final_fields.balance {
25+
value = get_value(&balance.clone().into())?;
26+
}
27+
}
28+
if value == BigDecimal::from(0) {
29+
return Ok(None);
30+
}
31+
Ok(Some(value))
32+
}
33+
34+
#[cfg(test)]
35+
mod test {
36+
use core::cell::LazyCell;
37+
38+
use serde_json::Value;
39+
40+
use super::*;
41+
use crate::models::transactions::metadata::TransactionMetadata;
42+
43+
#[test]
44+
fn test_parse_final_balances() {
45+
let txn: LazyCell<TransactionMetadata> = LazyCell::new(|| {
46+
let txn_value: Value =
47+
serde_json::from_str(include_str!("./test_data/payment_iou.json")).unwrap();
48+
let txn_meta = txn_value["meta"].clone();
49+
let txn_meta: TransactionMetadata = serde_json::from_value(txn_meta).unwrap();
50+
51+
txn_meta
52+
});
53+
assert!(get_final_balances(&txn).is_ok());
54+
}
55+
}

0 commit comments

Comments
 (0)