carbon_cargo_decoder/instructions/
init_definition.rs1use crate::types::InitDefinitionInput;
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))]
12#[derive(Debug, Clone, borsh::BorshSerialize, CarbonDeserialize, PartialEq, Eq, Hash)]
13pub struct InitDefinition {
14 pub input: InitDefinitionInput,
15}
16
17#[derive(Debug, Clone, PartialEq)]
18#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
19pub struct InitDefinitionInstructionAccounts {
20 pub profile: solana_pubkey::Pubkey,
21 pub funder: solana_pubkey::Pubkey,
22 pub stats_definition: solana_pubkey::Pubkey,
23 pub system_program: solana_pubkey::Pubkey,
24 pub remaining: Vec<solana_instruction::AccountMeta>,
25}
26
27impl InitDefinition {
28 pub fn decode(data: &[u8]) -> Option<Self> {
29 if data.len() < 8 {
30 return None;
31 }
32 let discriminator = &data[0..8];
33 if discriminator != &[221, 131, 215, 35, 164, 237, 187, 236] {
34 return None;
35 }
36
37 let data_slice = data;
38
39 let data_slice = &data_slice[8..];
40
41 Self::deserialize(data_slice)
42 }
43}
44
45impl ArrangeAccounts for InitDefinition {
46 type ArrangedAccounts = InitDefinitionInstructionAccounts;
47
48 fn arrange_accounts(
49 accounts: &[solana_instruction::AccountMeta],
50 ) -> Option<Self::ArrangedAccounts> {
51 let mut iter = accounts.iter();
52
53 let profile = next_account(&mut iter)?;
54 let funder = next_account(&mut iter)?;
55 let stats_definition = next_account(&mut iter)?;
56 let system_program = next_account(&mut iter)?;
57
58 let remaining = iter.as_slice();
59
60 Some(InitDefinitionInstructionAccounts {
61 profile,
62 funder,
63 stats_definition,
64 system_program,
65 remaining: remaining.to_vec(),
66 })
67 }
68}