carbon_cargo_decoder/instructions/
remove_cargo.rs

1//! This code was AUTOGENERATED using the Codama library.
2use 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/// Removes cargo from a [`CargoPod`](state::CargoPod) to a given token account.
9/// Requires the authority to sign.
10
11#[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}