solana_block_decoder/transaction/
tx_token_balance.rs

1use {
2    solana_account_decoder_client_types::{
3        token::UiTokenAmount,
4    },
5    solana_transaction_status_client_types::{
6        UiTransactionTokenBalance,
7        option_serializer::OptionSerializer,
8    },
9    serde::{
10        Deserialize, Serialize,
11    },
12};
13
14
15#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
16pub struct TransactionTokenBalance {
17    pub account_index: u8,
18    pub mint: String,
19    pub ui_token_amount: UiTokenAmount,
20    pub owner: String,
21    pub program_id: String,
22}
23
24impl From<UiTransactionTokenBalance> for TransactionTokenBalance {
25    fn from(token_balance: UiTransactionTokenBalance) -> Self {
26        Self {
27            account_index: token_balance.account_index,
28            mint: token_balance.mint,
29            ui_token_amount: token_balance.ui_token_amount,
30            owner: match token_balance.owner {
31                OptionSerializer::Some(owner) => owner,
32                _ => String::new(),
33            },
34            program_id: match token_balance.program_id {
35                OptionSerializer::Some(program_id) => program_id,
36                _ => String::new(),
37            },
38        }
39    }
40}
41
42
43impl From<TransactionTokenBalance> for solana_transaction_status_client_types::TransactionTokenBalance {
44    fn from(balance: TransactionTokenBalance) -> Self {
45        Self {
46            account_index: balance.account_index,
47            mint: balance.mint,
48            ui_token_amount: balance.ui_token_amount,
49            owner: balance.owner,
50            program_id: balance.program_id,
51        }
52    }
53}