carbon_score_decoder/instructions/
process_repair.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 ProcessRepair {
11 pub staking_bump: u8,
12 pub scorevars_bump: u8,
13 pub scorevars_ship_bump: u8,
14 pub toolkit_quantity: u64,
15}
16
17#[derive(Debug, Clone, PartialEq)]
18#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
19pub struct ProcessRepairInstructionAccounts {
20 pub token_owner_account: solana_pubkey::Pubkey,
21 pub player_account: solana_pubkey::Pubkey,
22 pub ship_staking_account: solana_pubkey::Pubkey,
23 pub score_vars_account: solana_pubkey::Pubkey,
24 pub score_vars_ship_account: solana_pubkey::Pubkey,
25 pub system_program: solana_pubkey::Pubkey,
26 pub token_program: solana_pubkey::Pubkey,
27 pub clock: solana_pubkey::Pubkey,
28 pub rent: solana_pubkey::Pubkey,
29 pub ship_mint: solana_pubkey::Pubkey,
30 pub toolkit_mint: solana_pubkey::Pubkey,
31 pub toolkit_token_account_source: solana_pubkey::Pubkey,
32 pub remaining: Vec<solana_instruction::AccountMeta>,
33}
34
35impl ProcessRepair {
36 pub fn decode(data: &[u8]) -> Option<Self> {
37 if data.len() < 8 {
38 return None;
39 }
40 let discriminator = &data[0..8];
41 if discriminator != &[45, 221, 101, 143, 19, 154, 65, 60] {
42 return None;
43 }
44
45 let data_slice = data;
46
47 let data_slice = &data_slice[8..];
48
49 Self::deserialize(data_slice)
50 }
51}
52
53impl ArrangeAccounts for ProcessRepair {
54 type ArrangedAccounts = ProcessRepairInstructionAccounts;
55
56 fn arrange_accounts(
57 accounts: &[solana_instruction::AccountMeta],
58 ) -> Option<Self::ArrangedAccounts> {
59 let mut iter = accounts.iter();
60
61 let token_owner_account = next_account(&mut iter)?;
62 let player_account = next_account(&mut iter)?;
63 let ship_staking_account = next_account(&mut iter)?;
64 let score_vars_account = next_account(&mut iter)?;
65 let score_vars_ship_account = next_account(&mut iter)?;
66 let system_program = next_account(&mut iter)?;
67 let token_program = next_account(&mut iter)?;
68 let clock = next_account(&mut iter)?;
69 let rent = next_account(&mut iter)?;
70 let ship_mint = next_account(&mut iter)?;
71 let toolkit_mint = next_account(&mut iter)?;
72 let toolkit_token_account_source = next_account(&mut iter)?;
73
74 let remaining = iter.as_slice();
75
76 Some(ProcessRepairInstructionAccounts {
77 token_owner_account,
78 player_account,
79 ship_staking_account,
80 score_vars_account,
81 score_vars_ship_account,
82 system_program,
83 token_program,
84 clock,
85 rent,
86 ship_mint,
87 toolkit_mint,
88 toolkit_token_account_source,
89 remaining: remaining.to_vec(),
90 })
91 }
92}