spl_token_wrap/mint_customizer/
no_extensions.rs

1use {
2    crate::mint_customizer::interface::MintCustomizer,
3    solana_account_info::AccountInfo,
4    solana_program_error::ProgramError,
5    solana_pubkey::Pubkey,
6    spl_token_2022::{
7        extension::{ExtensionType, PodStateWithExtensions},
8        pod::PodMint,
9        state::Mint,
10    },
11};
12
13/// This implementation does not add any extensions.
14pub struct NoExtensionCustomizer;
15
16impl MintCustomizer for NoExtensionCustomizer {
17    fn get_token_2022_mint_space() -> Result<usize, ProgramError> {
18        let extensions = vec![];
19        ExtensionType::try_calculate_account_len::<Mint>(&extensions)
20    }
21
22    fn get_freeze_auth_and_decimals(
23        unwrapped_mint_account: &AccountInfo,
24    ) -> Result<(Option<Pubkey>, u8), ProgramError> {
25        // Copy fields over from original mint
26        let unwrapped_mint_data = unwrapped_mint_account.try_borrow_data()?;
27        let pod_mint = PodStateWithExtensions::<PodMint>::unpack(&unwrapped_mint_data)?.base;
28        let freeze_authority = pod_mint.freeze_authority.ok_or(()).ok();
29        let decimals = pod_mint.decimals;
30        Ok((freeze_authority, decimals))
31    }
32}