carbon_token_2022_decoder/instructions/
enable_harvest_to_mint.rs

1//! This code was AUTOGENERATED using the Codama library.
2//! Please DO NOT EDIT THIS FILE, instead use visitors
3//! to add features, then rerun Codama to update it.
4//!
5//! <https://github.com/codama-idl/codama>
6//!
7use 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/// Configure a confidential transfer fee mint to accept harvested confidential fees.
14#[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}