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}