carbon_token_2022_decoder/instructions/
initialize_mint2.rs

1//! This code was AUTOGENERATED using the Codama library.
2//! Please DO NOT EDIT THIS FILE, instead use visitors
3//! to add features, then rerun Codama to update it.
4//!
5//! <https://github.com/codama-idl/codama>
6//!
7use carbon_core::account_utils::next_account;
8use carbon_core::borsh;
9use carbon_core::deserialize::ArrangeAccounts;
10use carbon_core::deserialize::CarbonDeserialize;
11use carbon_core::CarbonDeserialize;
12use solana_pubkey::Pubkey;
13
14/// Like [`InitializeMint`], but does not require the Rent sysvar to be provided.
15#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
16#[derive(Debug, Clone, borsh::BorshSerialize, CarbonDeserialize, PartialEq)]
17pub struct InitializeMint2 {
18    /// Number of base 10 digits to the right of the decimal place.
19    pub decimals: u8,
20    /// The authority/multisignature to mint tokens.
21    pub mint_authority: Pubkey,
22    /// The optional freeze authority/multisignature of the mint.
23    pub freeze_authority: Option<Pubkey>,
24}
25
26#[derive(Debug, Clone, PartialEq)]
27#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
28pub struct InitializeMint2InstructionAccounts {
29    pub mint: solana_pubkey::Pubkey,
30    pub remaining: Vec<solana_instruction::AccountMeta>,
31}
32
33impl InitializeMint2 {
34    pub fn decode(data: &[u8]) -> Option<Self> {
35        if data.is_empty() {
36            return None;
37        }
38        let discriminator = &data[0..1];
39        if discriminator != [20] {
40            return None;
41        }
42
43        let data_slice = data;
44
45        let data_slice = &data_slice[1..];
46
47        Self::deserialize(data_slice)
48    }
49}
50
51impl ArrangeAccounts for InitializeMint2 {
52    type ArrangedAccounts = InitializeMint2InstructionAccounts;
53
54    fn arrange_accounts(
55        accounts: &[solana_instruction::AccountMeta],
56    ) -> Option<Self::ArrangedAccounts> {
57        let mut iter = accounts.iter();
58
59        let mint = next_account(&mut iter)?;
60
61        let remaining = iter.as_slice();
62
63        Some(InitializeMint2InstructionAccounts {
64            mint,
65            remaining: remaining.to_vec(),
66        })
67    }
68}