solana_loader_v3_interface/
state.rsuse solana_pubkey::Pubkey;
#[cfg_attr(feature = "frozen-abi", derive(solana_frozen_abi_macro::AbiExample))]
#[cfg_attr(
feature = "serde",
derive(serde_derive::Deserialize, serde_derive::Serialize)
)]
#[derive(Debug, PartialEq, Eq, Clone, Copy)]
pub enum UpgradeableLoaderState {
Uninitialized,
Buffer {
authority_address: Option<Pubkey>,
},
Program {
programdata_address: Pubkey,
},
ProgramData {
slot: u64,
upgrade_authority_address: Option<Pubkey>,
},
}
impl UpgradeableLoaderState {
pub const fn size_of_uninitialized() -> usize {
4 }
pub const fn size_of_buffer_metadata() -> usize {
37 }
pub const fn size_of_programdata_metadata() -> usize {
45 }
pub const fn size_of_program() -> usize {
36 }
pub const fn size_of_buffer(program_len: usize) -> usize {
Self::size_of_buffer_metadata().saturating_add(program_len)
}
pub const fn size_of_programdata(program_len: usize) -> usize {
Self::size_of_programdata_metadata().saturating_add(program_len)
}
}
#[cfg(test)]
mod tests {
use {super::*, bincode::serialized_size};
#[test]
fn test_state_size_of_uninitialized() {
let buffer_state = UpgradeableLoaderState::Uninitialized;
let size = serialized_size(&buffer_state).unwrap();
assert_eq!(UpgradeableLoaderState::size_of_uninitialized() as u64, size);
}
#[test]
fn test_state_size_of_buffer_metadata() {
let buffer_state = UpgradeableLoaderState::Buffer {
authority_address: Some(Pubkey::default()),
};
let size = serialized_size(&buffer_state).unwrap();
assert_eq!(
UpgradeableLoaderState::size_of_buffer_metadata() as u64,
size
);
}
#[test]
fn test_state_size_of_programdata_metadata() {
let programdata_state = UpgradeableLoaderState::ProgramData {
upgrade_authority_address: Some(Pubkey::default()),
slot: 0,
};
let size = serialized_size(&programdata_state).unwrap();
assert_eq!(
UpgradeableLoaderState::size_of_programdata_metadata() as u64,
size
);
}
#[test]
fn test_state_size_of_program() {
let program_state = UpgradeableLoaderState::Program {
programdata_address: Pubkey::default(),
};
let size = serialized_size(&program_state).unwrap();
assert_eq!(UpgradeableLoaderState::size_of_program() as u64, size);
}
}