carbon_token_program_decoder/accounts/
token.rs1use {crate::types::AccountState, solana_pubkey::Pubkey};
3
4#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5#[derive(Debug, Clone, borsh::BorshSerialize, borsh::BorshDeserialize, PartialEq)]
6pub struct Token {
7 pub mint: Pubkey,
9 pub owner: Pubkey,
11 pub amount: u64,
13 pub delegate: Option<Pubkey>,
16 pub state: AccountState,
18 pub is_native: Option<u64>,
23 pub delegated_amount: u64,
25 pub close_authority: Option<Pubkey>,
27}
28
29impl From<spl_token_interface::state::Account> for Token {
30 fn from(value: spl_token_interface::state::Account) -> Self {
31 Token {
32 mint: value.mint,
33 owner: value.owner,
34 amount: value.amount,
35 delegate: value.delegate.into(),
36 state: match value.state {
37 spl_token_interface::state::AccountState::Uninitialized => {
38 crate::types::AccountState::Uninitialized
39 }
40 spl_token_interface::state::AccountState::Initialized => {
41 crate::types::AccountState::Initialized
42 }
43 spl_token_interface::state::AccountState::Frozen => {
44 crate::types::AccountState::Frozen
45 }
46 },
47 is_native: value.is_native.into(),
48 delegated_amount: value.delegated_amount,
49 close_authority: value.close_authority.into(),
50 }
51 }
52}