Skip to main content

kaptn_lang/
context.rs

1pub use kaptn_derive_extrametas::ExtraMetas;
2use solana_program::{account_info::AccountInfo, program_error::ProgramError, pubkey::Pubkey};
3use spl_tlv_account_resolution::account::ExtraAccountMeta;
4
5pub struct TransferContext<'a, 'info, E = ()> {
6    pub program_id: &'a Pubkey,
7    pub source_account: &'a AccountInfo<'info>,
8    pub mint: &'a AccountInfo<'info>,
9    pub destination_account: &'a AccountInfo<'info>,
10    pub authority: &'a AccountInfo<'info>,
11    pub extra_account_metas: &'a AccountInfo<'info>,
12    pub amount: u64,
13    pub extra_metas: E,
14}
15
16pub trait ExtraMetas<'info>: Sized {
17    fn from_accounts(accounts: &[AccountInfo<'info>]) -> Result<Self, ProgramError>;
18    fn to_extra_account_metas() -> Vec<ExtraAccountMeta>;
19}
20
21impl<'info> ExtraMetas<'info> for () {
22    fn from_accounts(_accounts: &[AccountInfo<'info>]) -> Result<Self, ProgramError> {
23        Ok(())
24    }
25
26    fn to_extra_account_metas() -> Vec<ExtraAccountMeta> {
27        vec![]
28    }
29}