pub(crate) trait GenericTokenAccount {
// Required method
fn valid_account_data(account_data: &[u8]) -> bool;
// Provided methods
fn unpack_account_owner_unchecked(account_data: &[u8]) -> &Pubkey { ... }
fn unpack_account_mint_unchecked(account_data: &[u8]) -> &Pubkey { ... }
fn unpack_pubkey_unchecked(account_data: &[u8], offset: usize) -> &Pubkey { ... }
fn unpack_account_owner(account_data: &[u8]) -> Option<&Pubkey> { ... }
fn unpack_account_mint(account_data: &[u8]) -> Option<&Pubkey> { ... }
}