carbon_token_2022_decoder/instructions/
initialize_mint2.rs1use 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#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
16#[derive(Debug, Clone, borsh::BorshSerialize, CarbonDeserialize, PartialEq)]
17pub struct InitializeMint2 {
18 pub decimals: u8,
20 pub mint_authority: Pubkey,
22 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}