carbon_score_decoder/instructions/
process_close_accounts.rs1use carbon_core::CarbonDeserialize;
3use carbon_core::account_utils::next_account;
4use carbon_core::borsh;
5use carbon_core::deserialize::ArrangeAccounts;
6use carbon_core::deserialize::CarbonDeserialize;
7
8#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
9#[derive(Debug, Clone, borsh::BorshSerialize, CarbonDeserialize, PartialEq, Eq, Hash)]
10pub struct ProcessCloseAccounts {
11 pub staking_bump: u8,
12 pub scorevars_bump: u8,
13 pub ship_bump: u8,
14 pub fuel_bump: u8,
15 pub food_bump: u8,
16 pub arms_bump: u8,
17 pub escrow_auth_bump: u8,
18}
19
20#[derive(Debug, Clone, PartialEq)]
21#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
22pub struct ProcessCloseAccountsInstructionAccounts {
23 pub player_account: solana_pubkey::Pubkey,
24 pub ship_staking_account: solana_pubkey::Pubkey,
25 pub score_vars_account: solana_pubkey::Pubkey,
26 pub ship_token_account_escrow: solana_pubkey::Pubkey,
27 pub fuel_token_account_escrow: solana_pubkey::Pubkey,
28 pub food_token_account_escrow: solana_pubkey::Pubkey,
29 pub arms_token_account_escrow: solana_pubkey::Pubkey,
30 pub escrow_authority: solana_pubkey::Pubkey,
31 pub token_program: solana_pubkey::Pubkey,
32 pub system_program: solana_pubkey::Pubkey,
33 pub ship_mint: solana_pubkey::Pubkey,
34 pub fuel_mint: solana_pubkey::Pubkey,
35 pub food_mint: solana_pubkey::Pubkey,
36 pub arms_mint: solana_pubkey::Pubkey,
37 pub clock: solana_pubkey::Pubkey,
38 pub remaining: Vec<solana_instruction::AccountMeta>,
39}
40
41impl ProcessCloseAccounts {
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 != &[172, 2, 197, 170, 113, 225, 190, 90] {
48 return None;
49 }
50
51 let data_slice = data;
52
53 let data_slice = &data_slice[8..];
54
55 Self::deserialize(data_slice)
56 }
57}
58
59impl ArrangeAccounts for ProcessCloseAccounts {
60 type ArrangedAccounts = ProcessCloseAccountsInstructionAccounts;
61
62 fn arrange_accounts(
63 accounts: &[solana_instruction::AccountMeta],
64 ) -> Option<Self::ArrangedAccounts> {
65 let mut iter = accounts.iter();
66
67 let player_account = next_account(&mut iter)?;
68 let ship_staking_account = next_account(&mut iter)?;
69 let score_vars_account = next_account(&mut iter)?;
70 let ship_token_account_escrow = next_account(&mut iter)?;
71 let fuel_token_account_escrow = next_account(&mut iter)?;
72 let food_token_account_escrow = next_account(&mut iter)?;
73 let arms_token_account_escrow = next_account(&mut iter)?;
74 let escrow_authority = next_account(&mut iter)?;
75 let token_program = next_account(&mut iter)?;
76 let system_program = next_account(&mut iter)?;
77 let ship_mint = next_account(&mut iter)?;
78 let fuel_mint = next_account(&mut iter)?;
79 let food_mint = next_account(&mut iter)?;
80 let arms_mint = next_account(&mut iter)?;
81 let clock = next_account(&mut iter)?;
82
83 let remaining = iter.as_slice();
84
85 Some(ProcessCloseAccountsInstructionAccounts {
86 player_account,
87 ship_staking_account,
88 score_vars_account,
89 ship_token_account_escrow,
90 fuel_token_account_escrow,
91 food_token_account_escrow,
92 arms_token_account_escrow,
93 escrow_authority,
94 token_program,
95 system_program,
96 ship_mint,
97 fuel_mint,
98 food_mint,
99 arms_mint,
100 clock,
101 remaining: remaining.to_vec(),
102 })
103 }
104}