carbon_token_2022_decoder/instructions/
update_group_member_pointer.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/// Update the group member pointer address. Only supported for mints that
15/// include the `GroupMemberPointer` extension.
16#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
17#[derive(Debug, Clone, PartialEq)]
18pub struct UpdateGroupMemberPointer {
19    pub group_member_pointer_discriminator: u8,
20    /// The new account address that holds the member.
21    pub member_address: Option<Pubkey>,
22}
23
24#[derive(Debug, Clone, borsh::BorshSerialize, CarbonDeserialize, PartialEq)]
25pub struct UpdateGroupMemberPointerDeser {
26    pub group_member_pointer_discriminator: u8,
27    pub member_address: spl_pod::optional_keys::OptionalNonZeroPubkey,
28}
29
30#[derive(Debug, Clone, PartialEq)]
31#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
32pub struct UpdateGroupMemberPointerInstructionAccounts {
33    pub mint: solana_pubkey::Pubkey,
34    pub group_member_pointer_authority: solana_pubkey::Pubkey,
35    pub remaining: Vec<solana_instruction::AccountMeta>,
36}
37
38impl UpdateGroupMemberPointer {
39    pub fn decode(data: &[u8]) -> Option<Self> {
40        if data.len() < 2 {
41            return None;
42        }
43        let discriminator = &data[0..1];
44        if discriminator != [41] {
45            return None;
46        }
47        let group_member_pointer_discriminator = data[1];
48        if group_member_pointer_discriminator != 1 {
49            return None;
50        }
51
52        let data_slice = data;
53
54        let data_slice = &data_slice[1..];
55
56        let group_member_pointer = UpdateGroupMemberPointerDeser::deserialize(data_slice)?;
57
58        Some(UpdateGroupMemberPointer {
59            group_member_pointer_discriminator: group_member_pointer
60                .group_member_pointer_discriminator,
61            member_address: group_member_pointer.member_address.into(),
62        })
63    }
64}
65
66impl ArrangeAccounts for UpdateGroupMemberPointer {
67    type ArrangedAccounts = UpdateGroupMemberPointerInstructionAccounts;
68
69    fn arrange_accounts(
70        accounts: &[solana_instruction::AccountMeta],
71    ) -> Option<Self::ArrangedAccounts> {
72        let mut iter = accounts.iter();
73
74        let mint = next_account(&mut iter)?;
75        let group_member_pointer_authority = next_account(&mut iter)?;
76
77        let remaining = iter.as_slice();
78
79        Some(UpdateGroupMemberPointerInstructionAccounts {
80            mint,
81            group_member_pointer_authority,
82            remaining: remaining.to_vec(),
83        })
84    }
85}