#![allow(clippy::expect_used)]
use {
crate::{
AccountBuilder, AccountMode, AccountSharedData, BorrowedAccount, OwnedAccount,
ReadableAccount, StorageUnit,
},
solana_pubkey::Pubkey,
std::ptr::NonNull,
};
pub fn delegated_account(lamports: u64, data: Vec<u8>, owner: Pubkey) -> AccountBuilder {
AccountBuilder::default()
.lamports(lamports)
.data(data)
.owner(owner)
.mode(AccountMode::Delegated)
}
pub fn borrowed_account_buffer(data: Vec<u8>, owner: Pubkey) -> Vec<StorageUnit> {
let pubkey = Pubkey::new_unique();
let owned = AccountBuilder::default()
.lamports(1)
.data(data)
.owner(owner)
.build::<OwnedAccount>();
serialize_account_buffer(&owned, &pubkey)
}
pub fn serialize_account_buffer(owned: &OwnedAccount, pubkey: &Pubkey) -> Vec<StorageUnit> {
let mut buf = vec![Default::default(); owned.units() as usize];
unsafe { owned.serialize(&mut buf, pubkey) };
buf
}
pub fn init_borrowed_account(buf: &mut [StorageUnit]) -> BorrowedAccount {
let ptr = NonNull::from(&mut buf[..]).cast();
unsafe { BorrowedAccount::init(ptr) }
}
pub fn borrowed_shared_data(buf: &mut [StorageUnit]) -> AccountSharedData {
AccountSharedData::from(init_borrowed_account(buf))
}
pub fn active_borrowed_data(buf: &mut [StorageUnit]) -> Vec<u8> {
borrowed_shared_data(buf).data().to_vec()
}