carbon_token_2022_decoder/instructions/
update_default_account_state.rs1use crate::types::AccountState;
8use carbon_core::account_utils::next_account;
9use carbon_core::borsh;
10use carbon_core::deserialize::ArrangeAccounts;
11use carbon_core::deserialize::CarbonDeserialize;
12use carbon_core::CarbonDeserialize;
13
14#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
17#[derive(Debug, Clone, borsh::BorshSerialize, CarbonDeserialize, PartialEq)]
18pub struct UpdateDefaultAccountState {
19 pub default_account_state_discriminator: u8,
20 pub state: AccountState,
22}
23
24#[derive(Debug, Clone, PartialEq)]
25#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
26pub struct UpdateDefaultAccountStateInstructionAccounts {
27 pub mint: solana_pubkey::Pubkey,
28 pub freeze_authority: solana_pubkey::Pubkey,
29 pub remaining: Vec<solana_instruction::AccountMeta>,
30}
31
32impl UpdateDefaultAccountState {
33 pub fn decode(data: &[u8]) -> Option<Self> {
34 if data.len() < 2 {
35 return None;
36 }
37 let discriminator = &data[0..1];
38 if discriminator != [28] {
39 return None;
40 }
41 let default_account_state_discriminator = data[1];
42 if default_account_state_discriminator != 1 {
43 return None;
44 }
45
46 let data_slice = data;
47
48 let data_slice = &data_slice[1..];
49
50 Self::deserialize(data_slice)
51 }
52}
53
54impl ArrangeAccounts for UpdateDefaultAccountState {
55 type ArrangedAccounts = UpdateDefaultAccountStateInstructionAccounts;
56
57 fn arrange_accounts(
58 accounts: &[solana_instruction::AccountMeta],
59 ) -> Option<Self::ArrangedAccounts> {
60 let mut iter = accounts.iter();
61
62 let mint = next_account(&mut iter)?;
63 let freeze_authority = next_account(&mut iter)?;
64
65 let remaining = iter.as_slice();
66
67 Some(UpdateDefaultAccountStateInstructionAccounts {
68 mint,
69 freeze_authority,
70 remaining: remaining.to_vec(),
71 })
72 }
73}