carbon_token_2022_decoder/instructions/
update_default_account_state.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 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/// Update the default state for new Accounts. Only supported for mints that
15/// include the `DefaultAccountState` extension.
16#[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    /// The state each new token account should start with.
21    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}