kaptn-syn 0.3.0

Syntax parsing and code generation for Kaptn Transfer-Hook Framework
Documentation
use crate::TransferHookInput;
use quote::quote;

pub fn generate(_program: &TransferHookInput) -> proc_macro2::TokenStream {
    quote! {
        fn process_instruction<'info, E: ExtraMetas<'info>>(
            program_id: &Pubkey,
            accounts: &[AccountInfo<'info>],
            instruction_data: &[u8],
            process_transfer: fn(TransferContext<'_, 'info, E>) -> ProgramResult,
        ) -> ProgramResult {
            let instruction = TransferHookInstruction::unpack(instruction_data)?;

            match instruction {
                TransferHookInstruction::Execute { amount } => {
                    msg!("Instruction: Execute");
                    process_execute(program_id, accounts, amount, process_transfer)
                }
                TransferHookInstruction::InitializeExtraAccountMetaList { extra_account_metas: _ } => {
                    msg!("Instruction: InitializeExtraAccountMetaList");
                    let user_extra_metas = E::to_extra_account_metas();
                    process_initialize_extra_account_meta_list(
                        program_id,
                        accounts,
                        &user_extra_metas,
                    )
                }
                TransferHookInstruction::UpdateExtraAccountMetaList { extra_account_metas: _ } => {
                    msg!("Instruction: UpdateExtraAccountMetaList");
                    let user_extra_metas = E::to_extra_account_metas();
                    process_update_extra_account_meta_list(program_id, accounts, &user_extra_metas)
                }
            }
        }
    }
}