governance/tools/pack.rs
1//! General purpose packing utility functions
2
3use {
4 arrayref::array_refs,
5 solana_program::{program_error::ProgramError, program_option::COption, pubkey::Pubkey},
6};
7
8/// Unpacks COption from a slice
9pub fn unpack_coption_pubkey(src: &[u8; 36]) -> Result<COption<Pubkey>, ProgramError> {
10 let (tag, body) = array_refs![src, 4, 32];
11 match *tag {
12 [0, 0, 0, 0] => Ok(COption::None),
13 [1, 0, 0, 0] => Ok(COption::Some(Pubkey::new_from_array(*body))),
14 _ => Err(ProgramError::InvalidAccountData),
15 }
16}