use std::ops::{Deref, DerefMut};
use super::system_accounts::{get_light_system_account_metas, SystemAccountMetaConfig};
type Inner = light_sdk_types::pack_accounts::PackedAccounts<solana_instruction::AccountMeta>;
#[derive(Debug, Default)]
pub struct PackedAccounts(pub Inner);
impl Deref for PackedAccounts {
type Target = Inner;
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl DerefMut for PackedAccounts {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.0
}
}
impl From<Inner> for PackedAccounts {
fn from(inner: Inner) -> Self {
Self(inner)
}
}
impl From<PackedAccounts> for Inner {
fn from(wrapper: PackedAccounts) -> Self {
wrapper.0
}
}
impl PackedAccounts {
pub fn new_with_system_accounts(config: SystemAccountMetaConfig) -> crate::error::Result<Self> {
let mut accounts = Self::default();
accounts.add_system_accounts(config)?;
Ok(accounts)
}
pub fn add_system_accounts(
&mut self,
config: SystemAccountMetaConfig,
) -> crate::error::Result<()> {
self.0
.add_system_accounts_raw(get_light_system_account_metas(config));
Ok(())
}
#[cfg(feature = "v2")]
pub fn add_system_accounts_v2(
&mut self,
config: SystemAccountMetaConfig,
) -> crate::error::Result<()> {
self.0
.add_system_accounts_raw(super::system_accounts::get_light_system_account_metas_v2(
config,
));
Ok(())
}
}