carbon_token_2022_decoder/instructions/
initialize_token_group.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))]
18#[derive(Debug, Clone, PartialEq)]
19pub struct InitializeTokenGroup {
20 pub update_authority: Option<Pubkey>,
22 pub max_size: u64,
24}
25
26#[derive(Debug, Clone, borsh::BorshSerialize, CarbonDeserialize, PartialEq)]
27pub struct InitializeTokenGroupDeser {
28 pub update_authority: spl_pod::optional_keys::OptionalNonZeroPubkey,
29 pub max_size: u64,
30}
31
32#[derive(Debug, Clone, PartialEq)]
33#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
34pub struct InitializeTokenGroupInstructionAccounts {
35 pub group: solana_pubkey::Pubkey,
36 pub mint: solana_pubkey::Pubkey,
37 pub mint_authority: solana_pubkey::Pubkey,
38 pub remaining: Vec<solana_instruction::AccountMeta>,
39}
40
41impl InitializeTokenGroup {
42 pub fn decode(data: &[u8]) -> Option<Self> {
43 if data.len() < 8 {
44 return None;
45 }
46 let discriminator = &data[0..8];
47 if discriminator != [121, 113, 108, 39, 54, 51, 0, 4] {
48 return None;
49 }
50
51 let data_slice = data;
52
53 let data_slice = &data_slice[8..];
54
55 let token_group = InitializeTokenGroupDeser::deserialize(data_slice)?;
56
57 Some(InitializeTokenGroup {
58 update_authority: token_group.update_authority.into(),
59 max_size: token_group.max_size,
60 })
61 }
62}
63
64impl ArrangeAccounts for InitializeTokenGroup {
65 type ArrangedAccounts = InitializeTokenGroupInstructionAccounts;
66
67 fn arrange_accounts(
68 accounts: &[solana_instruction::AccountMeta],
69 ) -> Option<Self::ArrangedAccounts> {
70 let mut iter = accounts.iter();
71
72 let group = next_account(&mut iter)?;
73 let mint = next_account(&mut iter)?;
74 let mint_authority = next_account(&mut iter)?;
75
76 let remaining = iter.as_slice();
77
78 Some(InitializeTokenGroupInstructionAccounts {
79 group,
80 mint,
81 mint_authority,
82 remaining: remaining.to_vec(),
83 })
84 }
85}