use borsh::{BorshDeserialize, BorshSerialize}; use solana_program::{account_info::AccountInfo, entrypoint::ProgramResult, pubkey::Pubkey}; use crate::instruction::transfer_sol_with_cpi; use crate::instruction::transfer_sol_with_program; #[derive(BorshSerialize, BorshDeserialize, Debug)] pub enum TransferInstruction { CpiTransfer(u64), ProgramTransfer(u64), } pub fn process_instruction( program_id: &Pubkey, accounts: &[AccountInfo], input: &[u8], ) -> ProgramResult { let instruction = TransferInstruction::try_from_slice(input)?; match instruction { TransferInstruction::CpiTransfer(args) => transfer_sol_with_cpi(accounts, args), TransferInstruction::ProgramTransfer(args) => { transfer_sol_with_program(program_id, accounts, args) } } }