#[cfg(feature = "pinocchio")]
pub type AccountInfo = pinocchio::account_info::AccountInfo;
#[cfg(all(not(feature = "pinocchio"), feature = "anchor"))]
pub type AccountInfo<'a> = anchor_lang::prelude::AccountInfo<'a>;
#[cfg(all(not(feature = "pinocchio"), not(feature = "anchor")))]
pub type AccountInfo<'a> = solana_program::account_info::AccountInfo<'a>;
#[cfg(feature = "pinocchio")]
pub trait AsAccountInfo<'a> {
fn as_account_info(&self) -> &AccountInfo;
}
#[cfg(not(feature = "pinocchio"))]
pub trait AsAccountInfo<'a> {
fn as_account_info(&self) -> &AccountInfo<'a>;
}
#[cfg(feature = "pinocchio")]
impl<'a> AsAccountInfo<'a> for AccountInfo {
#[inline(always)]
fn as_account_info(&self) -> &AccountInfo {
self
}
}
#[cfg(not(feature = "pinocchio"))]
impl<'a> AsAccountInfo<'a> for AccountInfo<'a> {
#[inline(always)]
fn as_account_info(&self) -> &AccountInfo<'a> {
self
}
}
#[cfg(feature = "pinocchio")]
impl<'a> AsAccountInfo<'a> for &AccountInfo {
#[inline(always)]
fn as_account_info(&self) -> &AccountInfo {
self
}
}
#[cfg(not(feature = "pinocchio"))]
impl<'a> AsAccountInfo<'a> for &AccountInfo<'a> {
#[inline(always)]
fn as_account_info(&self) -> &AccountInfo<'a> {
self
}
}
#[cfg(feature = "pinocchio")]
#[macro_export]
macro_rules! get_account_key {
($account:expr) => {
$account.key()
};
}
#[cfg(not(feature = "pinocchio"))]
#[macro_export]
macro_rules! get_account_key {
($account:expr) => {
$account.key
};
}
#[cfg(feature = "pinocchio")]
#[macro_export]
macro_rules! borrow_account_data {
($account:expr) => {
$account.borrow_data_unchecked()
};
}
#[cfg(not(feature = "pinocchio"))]
#[macro_export]
macro_rules! borrow_account_data {
($account:expr) => {
$account.data.borrow()
};
}
#[cfg(feature = "pinocchio")]
#[macro_export]
macro_rules! borrow_mut_account_data {
($account:expr) => {
unsafe {
$account.borrow_mut_data_unchecked()
}
};
}
#[cfg(not(feature = "pinocchio"))]
#[macro_export]
macro_rules! borrow_mut_account_data {
($account:expr) => {
$account.data.borrow_mut()
};
}