use {
crate::{Account, AccountSharedData},
serde::ser::{Serialize, Serializer},
};
mod account_serialize {
#[cfg(feature = "frozen-abi")]
use solana_frozen_abi_macro::{frozen_abi, AbiExample};
use {
crate::ReadableAccount,
serde::{ser::Serializer, Serialize},
solana_clock::Epoch,
solana_pubkey::Pubkey,
};
#[repr(C)]
#[cfg_attr(
feature = "frozen-abi",
derive(AbiExample),
frozen_abi(digest = "62EqVoynUFvuui7DVfqWCvZP7bxKGJGioeSBnWrdjRME")
)]
#[derive(serde_derive::Serialize)]
#[serde(rename_all = "camelCase")]
struct Account<'a> {
lamports: u64,
#[serde(with = "serde_bytes")]
data: &'a [u8],
owner: &'a Pubkey,
executable: bool,
rent_epoch: Epoch,
}
pub fn serialize_account<S>(
account: &impl ReadableAccount,
serializer: S,
) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
let temp = Account {
lamports: account.lamports(),
data: account.data(),
owner: account.owner(),
executable: account.executable(),
rent_epoch: account.rent_epoch(),
};
temp.serialize(serializer)
}
}
impl Serialize for Account {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
account_serialize::serialize_account(self, serializer)
}
}
impl Serialize for AccountSharedData {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
account_serialize::serialize_account(self, serializer)
}
}