solana_runtime/serde_snapshot/
storage.rs

1use {
2    crate::accounts_db::AccountStorageEntry,
3    serde::{Deserialize, Serialize},
4};
5
6/// The serialized AppendVecId type is fixed as usize
7pub(crate) type SerializedAppendVecId = usize;
8
9// Serializable version of AccountStorageEntry for snapshot format
10#[derive(Clone, Copy, Debug, Default, Eq, PartialEq, Serialize, Deserialize)]
11pub struct SerializableAccountStorageEntry {
12    id: SerializedAppendVecId,
13    accounts_current_len: usize,
14}
15
16pub(super) trait SerializableStorage {
17    fn id(&self) -> SerializedAppendVecId;
18    fn current_len(&self) -> usize;
19}
20
21impl SerializableStorage for SerializableAccountStorageEntry {
22    fn id(&self) -> SerializedAppendVecId {
23        self.id
24    }
25    fn current_len(&self) -> usize {
26        self.accounts_current_len
27    }
28}
29
30impl From<&AccountStorageEntry> for SerializableAccountStorageEntry {
31    fn from(rhs: &AccountStorageEntry) -> Self {
32        Self {
33            id: rhs.append_vec_id() as SerializedAppendVecId,
34            accounts_current_len: rhs.accounts.len(),
35        }
36    }
37}
38
39#[cfg(RUSTC_WITH_SPECIALIZATION)]
40impl solana_frozen_abi::abi_example::IgnoreAsHelper for SerializableAccountStorageEntry {}