carbon_sage_starbased_decoder/instructions/
create_fleet.rs1use crate::types::CreateFleetInput;
3use carbon_core::CarbonDeserialize;
4use carbon_core::account_utils::next_account;
5use carbon_core::borsh;
6use carbon_core::deserialize::ArrangeAccounts;
7use carbon_core::deserialize::CarbonDeserialize;
8
9#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
10#[derive(Debug, Clone, borsh::BorshSerialize, CarbonDeserialize, PartialEq, Eq, Hash)]
11pub struct CreateFleet {
12 pub input: CreateFleetInput,
13}
14
15#[derive(Debug, Clone, PartialEq)]
16#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
17pub struct CreateFleetInstructionAccounts {
18 pub key: solana_pubkey::Pubkey,
19 pub profile: solana_pubkey::Pubkey,
20 pub profile_faction: solana_pubkey::Pubkey,
21 pub game_id: solana_pubkey::Pubkey,
22 pub game_state: solana_pubkey::Pubkey,
23 pub funder: solana_pubkey::Pubkey,
24 pub fleet: solana_pubkey::Pubkey,
25 pub fleet_ships: solana_pubkey::Pubkey,
26 pub cargo_hold: solana_pubkey::Pubkey,
27 pub fuel_tank: solana_pubkey::Pubkey,
28 pub ammo_bank: solana_pubkey::Pubkey,
29 pub ship: solana_pubkey::Pubkey,
30 pub starbase: solana_pubkey::Pubkey,
31 pub starbase_player: solana_pubkey::Pubkey,
32 pub cargo_stats_definition: solana_pubkey::Pubkey,
33 pub cargo_program: solana_pubkey::Pubkey,
34 pub system_program: solana_pubkey::Pubkey,
35 pub remaining: Vec<solana_instruction::AccountMeta>,
36}
37
38impl CreateFleet {
39 pub fn decode(data: &[u8]) -> Option<Self> {
40 if data.len() < 8 {
41 return None;
42 }
43 let discriminator = &data[0..8];
44 if discriminator != &[76, 123, 81, 82, 235, 228, 156, 203] {
45 return None;
46 }
47
48 let data_slice = data;
49
50 let data_slice = &data_slice[8..];
51
52 Self::deserialize(data_slice)
53 }
54}
55
56impl ArrangeAccounts for CreateFleet {
57 type ArrangedAccounts = CreateFleetInstructionAccounts;
58
59 fn arrange_accounts(
60 accounts: &[solana_instruction::AccountMeta],
61 ) -> Option<Self::ArrangedAccounts> {
62 let mut iter = accounts.iter();
63
64 let key = next_account(&mut iter)?;
65 let profile = next_account(&mut iter)?;
66 let profile_faction = next_account(&mut iter)?;
67 let game_id = next_account(&mut iter)?;
68 let game_state = next_account(&mut iter)?;
69 let funder = next_account(&mut iter)?;
70 let fleet = next_account(&mut iter)?;
71 let fleet_ships = next_account(&mut iter)?;
72 let cargo_hold = next_account(&mut iter)?;
73 let fuel_tank = next_account(&mut iter)?;
74 let ammo_bank = next_account(&mut iter)?;
75 let ship = next_account(&mut iter)?;
76 let starbase = next_account(&mut iter)?;
77 let starbase_player = next_account(&mut iter)?;
78 let cargo_stats_definition = next_account(&mut iter)?;
79 let cargo_program = next_account(&mut iter)?;
80 let system_program = next_account(&mut iter)?;
81
82 let remaining = iter.as_slice();
83
84 Some(CreateFleetInstructionAccounts {
85 key,
86 profile,
87 profile_faction,
88 game_id,
89 game_state,
90 funder,
91 fleet,
92 fleet_ships,
93 cargo_hold,
94 fuel_tank,
95 ammo_bank,
96 ship,
97 starbase,
98 starbase_player,
99 cargo_stats_definition,
100 cargo_program,
101 system_program,
102 remaining: remaining.to_vec(),
103 })
104 }
105}