2022-01-13 07:20:20 -08:00
|
|
|
use {
|
|
|
|
crate::accounts_db::AccountStorageEntry,
|
|
|
|
serde::{Deserialize, Serialize},
|
|
|
|
};
|
|
|
|
|
|
|
|
/// The serialized AppendVecId type is fixed as usize
|
2022-08-29 11:17:27 -07:00
|
|
|
pub(crate) type SerializedAppendVecId = usize;
|
2022-01-13 07:20:20 -08:00
|
|
|
|
|
|
|
// Serializable version of AccountStorageEntry for snapshot format
|
|
|
|
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq, Serialize, Deserialize)]
|
2022-07-06 15:30:30 -07:00
|
|
|
pub struct SerializableAccountStorageEntry {
|
2022-01-13 07:20:20 -08:00
|
|
|
id: SerializedAppendVecId,
|
|
|
|
accounts_current_len: usize,
|
|
|
|
}
|
|
|
|
|
|
|
|
pub(super) trait SerializableStorage {
|
|
|
|
fn id(&self) -> SerializedAppendVecId;
|
|
|
|
fn current_len(&self) -> usize;
|
|
|
|
}
|
|
|
|
|
|
|
|
impl SerializableStorage for SerializableAccountStorageEntry {
|
|
|
|
fn id(&self) -> SerializedAppendVecId {
|
|
|
|
self.id
|
|
|
|
}
|
|
|
|
fn current_len(&self) -> usize {
|
|
|
|
self.accounts_current_len
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl From<&AccountStorageEntry> for SerializableAccountStorageEntry {
|
|
|
|
fn from(rhs: &AccountStorageEntry) -> Self {
|
|
|
|
Self {
|
|
|
|
id: rhs.append_vec_id() as SerializedAppendVecId,
|
|
|
|
accounts_current_len: rhs.accounts.len(),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#[cfg(RUSTC_WITH_SPECIALIZATION)]
|
|
|
|
impl solana_frozen_abi::abi_example::IgnoreAsHelper for SerializableAccountStorageEntry {}
|