carbon_cargo_decoder/instructions/
remove_cargo.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))]
12#[derive(Debug, Clone, borsh::BorshSerialize, CarbonDeserialize, PartialEq, Eq, Hash)]
13pub struct RemoveCargo {
14 pub cargo_amount: u64,
15}
16
17#[derive(Debug, Clone, PartialEq)]
18#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
19pub struct RemoveCargoInstructionAccounts {
20 pub authority: solana_pubkey::Pubkey,
21 pub stats_definition: solana_pubkey::Pubkey,
22 pub cargo_pod: solana_pubkey::Pubkey,
23 pub cargo_type: solana_pubkey::Pubkey,
24 pub destination_token_account: solana_pubkey::Pubkey,
25 pub cargo_token_account: solana_pubkey::Pubkey,
26 pub token_program: solana_pubkey::Pubkey,
27 pub remaining: Vec<solana_instruction::AccountMeta>,
28}
29
30impl RemoveCargo {
31 pub fn decode(data: &[u8]) -> Option<Self> {
32 if data.len() < 8 {
33 return None;
34 }
35 let discriminator = &data[0..8];
36 if discriminator != &[114, 110, 36, 207, 188, 29, 111, 251] {
37 return None;
38 }
39
40 let data_slice = data;
41
42 let data_slice = &data_slice[8..];
43
44 Self::deserialize(data_slice)
45 }
46}
47
48impl ArrangeAccounts for RemoveCargo {
49 type ArrangedAccounts = RemoveCargoInstructionAccounts;
50
51 fn arrange_accounts(
52 accounts: &[solana_instruction::AccountMeta],
53 ) -> Option<Self::ArrangedAccounts> {
54 let mut iter = accounts.iter();
55
56 let authority = next_account(&mut iter)?;
57 let stats_definition = next_account(&mut iter)?;
58 let cargo_pod = next_account(&mut iter)?;
59 let cargo_type = next_account(&mut iter)?;
60 let destination_token_account = next_account(&mut iter)?;
61 let cargo_token_account = next_account(&mut iter)?;
62 let token_program = next_account(&mut iter)?;
63
64 let remaining = iter.as_slice();
65
66 Some(RemoveCargoInstructionAccounts {
67 authority,
68 stats_definition,
69 cargo_pod,
70 cargo_type,
71 destination_token_account,
72 cargo_token_account,
73 token_program,
74 remaining: remaining.to_vec(),
75 })
76 }
77}