carbon_token_2022_decoder/instructions/
update_group_member_pointer.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))]
17#[derive(Debug, Clone, PartialEq)]
18pub struct UpdateGroupMemberPointer {
19 pub group_member_pointer_discriminator: u8,
20 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}