carbon_sage_starbased_decoder/instructions/
create_crafting_process.rs1use crate::types::StarbaseCreateCraftingProcessInput;
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 CreateCraftingProcess {
12 pub input: StarbaseCreateCraftingProcessInput,
13}
14
15#[derive(Debug, Clone, PartialEq)]
16#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
17pub struct CreateCraftingProcessInstructionAccounts {
18 pub funder: solana_pubkey::Pubkey,
19 pub starbase: solana_pubkey::Pubkey,
20 pub starbase_player: solana_pubkey::Pubkey,
21 pub crafting_instance: solana_pubkey::Pubkey,
22 pub crafting_facility: solana_pubkey::Pubkey,
23 pub crafting_process: solana_pubkey::Pubkey,
24 pub crafting_recipe: solana_pubkey::Pubkey,
25 pub crafting_domain: solana_pubkey::Pubkey,
26 pub key: solana_pubkey::Pubkey,
27 pub profile: solana_pubkey::Pubkey,
28 pub profile_faction: solana_pubkey::Pubkey,
29 pub game_id: solana_pubkey::Pubkey,
30 pub game_state: solana_pubkey::Pubkey,
31 pub crafting_program: solana_pubkey::Pubkey,
32 pub system_program: solana_pubkey::Pubkey,
33 pub remaining: Vec<solana_instruction::AccountMeta>,
34}
35
36impl CreateCraftingProcess {
37 pub fn decode(data: &[u8]) -> Option<Self> {
38 if data.len() < 8 {
39 return None;
40 }
41 let discriminator = &data[0..8];
42 if discriminator != &[54, 25, 3, 71, 90, 215, 99, 108] {
43 return None;
44 }
45
46 let data_slice = data;
47
48 let data_slice = &data_slice[8..];
49
50 Self::deserialize(data_slice)
51 }
52}
53
54impl ArrangeAccounts for CreateCraftingProcess {
55 type ArrangedAccounts = CreateCraftingProcessInstructionAccounts;
56
57 fn arrange_accounts(
58 accounts: &[solana_instruction::AccountMeta],
59 ) -> Option<Self::ArrangedAccounts> {
60 let mut iter = accounts.iter();
61
62 let funder = next_account(&mut iter)?;
63 let starbase = next_account(&mut iter)?;
64 let starbase_player = next_account(&mut iter)?;
65 let crafting_instance = next_account(&mut iter)?;
66 let crafting_facility = next_account(&mut iter)?;
67 let crafting_process = next_account(&mut iter)?;
68 let crafting_recipe = next_account(&mut iter)?;
69 let crafting_domain = next_account(&mut iter)?;
70 let key = next_account(&mut iter)?;
71 let profile = next_account(&mut iter)?;
72 let profile_faction = next_account(&mut iter)?;
73 let game_id = next_account(&mut iter)?;
74 let game_state = next_account(&mut iter)?;
75 let crafting_program = next_account(&mut iter)?;
76 let system_program = next_account(&mut iter)?;
77
78 let remaining = iter.as_slice();
79
80 Some(CreateCraftingProcessInstructionAccounts {
81 funder,
82 starbase,
83 starbase_player,
84 crafting_instance,
85 crafting_facility,
86 crafting_process,
87 crafting_recipe,
88 crafting_domain,
89 key,
90 profile,
91 profile_faction,
92 game_id,
93 game_state,
94 crafting_program,
95 system_program,
96 remaining: remaining.to_vec(),
97 })
98 }
99}