Deprecate UiTokenAmount::ui_amount (#15616)

* Add TokenAmount::ui_amount_string

* Fixup solana-tokens

* Update docs
This commit is contained in:
Tyera Eulberg
2021-03-02 22:51:41 -07:00
committed by GitHub
parent a9c8dbfd0c
commit 19ac79b5cc
11 changed files with 219 additions and 127 deletions

View File

@@ -70,6 +70,7 @@ message UiTokenAmount {
double ui_amount = 1;
uint32 decimals = 2;
string amount = 3;
string ui_amount_string = 4;
}
enum RewardType {

View File

@@ -1,5 +1,5 @@
use crate::StoredExtendedRewards;
use solana_account_decoder::parse_token::UiTokenAmount;
use solana_account_decoder::parse_token::{real_number_string_trimmed, UiTokenAmount};
use solana_sdk::{
hash::Hash,
instruction::CompiledInstruction,
@@ -14,7 +14,10 @@ use solana_transaction_status::{
ConfirmedBlock, InnerInstructions, Reward, RewardType, TransactionByAddrInfo,
TransactionStatusMeta, TransactionTokenBalance, TransactionWithStatusMeta,
};
use std::convert::{TryFrom, TryInto};
use std::{
convert::{TryFrom, TryInto},
str::FromStr,
};
pub mod generated {
include!(concat!(
@@ -383,9 +386,10 @@ impl From<TransactionTokenBalance> for generated::TokenBalance {
account_index: value.account_index as u32,
mint: value.mint,
ui_token_amount: Some(generated::UiTokenAmount {
ui_amount: value.ui_token_amount.ui_amount,
ui_amount: value.ui_token_amount.ui_amount.unwrap_or_default(),
decimals: value.ui_token_amount.decimals as u32,
amount: value.ui_token_amount.amount,
ui_amount_string: value.ui_token_amount.ui_amount_string,
}),
}
}
@@ -398,9 +402,21 @@ impl From<generated::TokenBalance> for TransactionTokenBalance {
account_index: value.account_index as u8,
mint: value.mint,
ui_token_amount: UiTokenAmount {
ui_amount: ui_token_amount.ui_amount,
ui_amount: if (ui_token_amount.ui_amount - f64::default()).abs() > f64::EPSILON {
Some(ui_token_amount.ui_amount)
} else {
None
},
decimals: ui_token_amount.decimals as u8,
amount: ui_token_amount.amount,
amount: ui_token_amount.amount.clone(),
ui_amount_string: if !ui_token_amount.ui_amount_string.is_empty() {
ui_token_amount.ui_amount_string
} else {
real_number_string_trimmed(
u64::from_str(&ui_token_amount.amount).unwrap_or_default(),
ui_token_amount.decimals as u8,
)
},
},
}
}