carbon_crafting_decoder/instructions/
create_crafting_process.rs1use crate::types::CreateCraftingProcessInput;
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: CreateCraftingProcessInput,
13}
14
15#[derive(Debug, Clone, PartialEq)]
16#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
17pub struct CreateCraftingProcessInstructionAccounts {
18 pub location: solana_pubkey::Pubkey,
19 pub authority: solana_pubkey::Pubkey,
20 pub funder: solana_pubkey::Pubkey,
21 pub crafting_process: solana_pubkey::Pubkey,
22 pub recipe: solana_pubkey::Pubkey,
23 pub crafting_facility: solana_pubkey::Pubkey,
24 pub system_program: solana_pubkey::Pubkey,
25 pub remaining: Vec<solana_instruction::AccountMeta>,
26}
27
28impl CreateCraftingProcess {
29 pub fn decode(data: &[u8]) -> Option<Self> {
30 if data.len() < 8 {
31 return None;
32 }
33 let discriminator = &data[0..8];
34 if discriminator != &[54, 25, 3, 71, 90, 215, 99, 108] {
35 return None;
36 }
37
38 let data_slice = data;
39
40 let data_slice = &data_slice[8..];
41
42 Self::deserialize(data_slice)
43 }
44}
45
46impl ArrangeAccounts for CreateCraftingProcess {
47 type ArrangedAccounts = CreateCraftingProcessInstructionAccounts;
48
49 fn arrange_accounts(
50 accounts: &[solana_instruction::AccountMeta],
51 ) -> Option<Self::ArrangedAccounts> {
52 let mut iter = accounts.iter();
53
54 let location = next_account(&mut iter)?;
55 let authority = next_account(&mut iter)?;
56 let funder = next_account(&mut iter)?;
57 let crafting_process = next_account(&mut iter)?;
58 let recipe = next_account(&mut iter)?;
59 let crafting_facility = next_account(&mut iter)?;
60 let system_program = next_account(&mut iter)?;
61
62 let remaining = iter.as_slice();
63
64 Some(CreateCraftingProcessInstructionAccounts {
65 location,
66 authority,
67 funder,
68 crafting_process,
69 recipe,
70 crafting_facility,
71 system_program,
72 remaining: remaining.to_vec(),
73 })
74 }
75}