use crate::solana_compat::solana_sdk;
pub fn instruction_v3_to_v2(
ix: anchor_lang::solana_program::instruction::Instruction,
) -> crate::solana_compat::Instruction {
crate::solana_compat::Instruction {
program_id: crate::solana_compat::Pubkey::from(ix.program_id.to_bytes()),
accounts: ix
.accounts
.into_iter()
.map(|meta| crate::solana_compat::AccountMeta {
pubkey: crate::solana_compat::Pubkey::from(meta.pubkey.to_bytes()),
is_signer: meta.is_signer,
is_writable: meta.is_writable,
})
.collect(),
data: ix.data,
}
}
pub trait IntoV2Instruction {
fn into_v2_instruction(self) -> crate::solana_compat::Instruction;
}
impl IntoV2Instruction for anchor_lang::solana_program::instruction::Instruction {
fn into_v2_instruction(self) -> crate::solana_compat::Instruction {
crate::solana_compat::Instruction {
program_id: crate::solana_compat::Pubkey::from(self.program_id.to_bytes()),
accounts: self
.accounts
.into_iter()
.map(|meta| crate::solana_compat::AccountMeta {
pubkey: crate::solana_compat::Pubkey::from(meta.pubkey.to_bytes()),
is_signer: meta.is_signer,
is_writable: meta.is_writable,
})
.collect(),
data: self.data,
}
}
}
pub fn instruction_v2_to_v3(
ix: crate::solana_compat::Instruction,
) -> solana_sdk::instruction::Instruction {
solana_sdk::instruction::Instruction {
program_id: pubkey_v2_to_v3(ix.program_id),
accounts: ix.accounts.into_iter().map(account_meta_v2_to_v3).collect(),
data: ix.data,
}
}
pub fn pubkey_v3_to_v2(pubkey: solana_sdk::pubkey::Pubkey) -> crate::solana_compat::Pubkey {
crate::solana_compat::Pubkey::from(pubkey.to_bytes())
}
pub fn pubkey_v2_to_v3(pubkey: crate::solana_compat::Pubkey) -> solana_sdk::pubkey::Pubkey {
solana_sdk::pubkey::Pubkey::from(pubkey.to_bytes())
}
pub fn account_meta_v3_to_v2(
meta: solana_sdk::instruction::AccountMeta,
) -> crate::solana_compat::AccountMeta {
crate::solana_compat::AccountMeta {
pubkey: pubkey_v3_to_v2(meta.pubkey),
is_signer: meta.is_signer,
is_writable: meta.is_writable,
}
}
pub fn account_meta_v2_to_v3(
meta: crate::solana_compat::AccountMeta,
) -> solana_sdk::instruction::AccountMeta {
if meta.is_writable {
if meta.is_signer {
solana_sdk::instruction::AccountMeta::new(pubkey_v2_to_v3(meta.pubkey), true)
} else {
solana_sdk::instruction::AccountMeta::new(pubkey_v2_to_v3(meta.pubkey), false)
}
} else if meta.is_signer {
solana_sdk::instruction::AccountMeta::new_readonly(pubkey_v2_to_v3(meta.pubkey), true)
} else {
solana_sdk::instruction::AccountMeta::new_readonly(pubkey_v2_to_v3(meta.pubkey), false)
}
}