carbon_token_2022_decoder/instructions/
enable_harvest_to_mint.rs1use carbon_core::account_utils::next_account;
8use carbon_core::borsh;
9use carbon_core::deserialize::ArrangeAccounts;
10use carbon_core::deserialize::CarbonDeserialize;
11use carbon_core::CarbonDeserialize;
12
13#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
15#[derive(Debug, Clone, borsh::BorshSerialize, CarbonDeserialize, PartialEq)]
16pub struct EnableHarvestToMint {
17 pub confidential_transfer_fee_discriminator: u8,
18}
19
20#[derive(Debug, Clone, PartialEq)]
21#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
22pub struct EnableHarvestToMintInstructionAccounts {
23 pub mint: solana_pubkey::Pubkey,
24 pub authority: solana_pubkey::Pubkey,
25 pub remaining: Vec<solana_instruction::AccountMeta>,
26}
27
28impl EnableHarvestToMint {
29 pub fn decode(data: &[u8]) -> Option<Self> {
30 if data.len() < 2 {
31 return None;
32 }
33 let discriminator = &data[0..1];
34 if discriminator != [37] {
35 return None;
36 }
37 let confidential_transfer_fee_discriminator = data[1];
38 if confidential_transfer_fee_discriminator != 4 {
39 return None;
40 }
41
42 let data_slice = data;
43
44 let data_slice = &data_slice[1..];
45
46 Self::deserialize(data_slice)
47 }
48}
49
50impl ArrangeAccounts for EnableHarvestToMint {
51 type ArrangedAccounts = EnableHarvestToMintInstructionAccounts;
52
53 fn arrange_accounts(
54 accounts: &[solana_instruction::AccountMeta],
55 ) -> Option<Self::ArrangedAccounts> {
56 let mut iter = accounts.iter();
57
58 let mint = next_account(&mut iter)?;
59 let authority = next_account(&mut iter)?;
60
61 let remaining = iter.as_slice();
62
63 Some(EnableHarvestToMintInstructionAccounts {
64 mint,
65 authority,
66 remaining: remaining.to_vec(),
67 })
68 }
69}