use borsh::{BorshDeserialize, BorshSerialize};
use solana_program::pubkey::Pubkey;
use crate::compressed_account::CompressedAccountWithMerkleContext;
#[derive(Clone, Copy, Debug, PartialEq, Eq, BorshDeserialize, BorshSerialize)]
#[repr(u8)]
pub enum AccountState {
Initialized,
Frozen,
}
#[derive(Debug, PartialEq, Eq, BorshDeserialize, BorshSerialize, Clone)]
pub struct TokenData {
pub mint: Pubkey,
pub owner: Pubkey,
pub amount: u64,
pub delegate: Option<Pubkey>,
pub state: AccountState,
pub tlv: Option<Vec<u8>>,
}
#[derive(Debug, Clone)]
pub struct TokenDataWithMerkleContext {
pub token_data: TokenData,
pub compressed_account: CompressedAccountWithMerkleContext,
}