carbon_token_2022_decoder/instructions/
initialize_token_group.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/// Initialize a new `Group`
15///
16/// Assumes one has already initialized a mint for the group.
17#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
18#[derive(Debug, Clone, PartialEq)]
19pub struct InitializeTokenGroup {
20    /// Update authority for the group
21    pub update_authority: Option<Pubkey>,
22    /// The maximum number of group members
23    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}