carbon_token_2022_decoder/instructions/
enable_memo_transfers.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/// Require memos for transfers into this Account. Adds the MemoTransfer
14/// extension to the Account, if it doesn't already exist.
15#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
16#[derive(Debug, Clone, borsh::BorshSerialize, CarbonDeserialize, PartialEq)]
17pub struct EnableMemoTransfers {
18    pub memo_transfers_discriminator: u8,
19}
20
21#[derive(Debug, Clone, PartialEq)]
22#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
23pub struct EnableMemoTransfersInstructionAccounts {
24    pub token: solana_pubkey::Pubkey,
25    pub owner: solana_pubkey::Pubkey,
26    pub remaining: Vec<solana_instruction::AccountMeta>,
27}
28
29impl EnableMemoTransfers {
30    pub fn decode(data: &[u8]) -> Option<Self> {
31        if data.len() < 2 {
32            return None;
33        }
34        let discriminator = &data[0..1];
35        if discriminator != [30] {
36            return None;
37        }
38        let memo_transfers_discriminator = data[1];
39        if memo_transfers_discriminator != 0 {
40            return None;
41        }
42
43        let data_slice = data;
44
45        let data_slice = &data_slice[1..];
46
47        Self::deserialize(data_slice)
48    }
49}
50
51impl ArrangeAccounts for EnableMemoTransfers {
52    type ArrangedAccounts = EnableMemoTransfersInstructionAccounts;
53
54    fn arrange_accounts(
55        accounts: &[solana_instruction::AccountMeta],
56    ) -> Option<Self::ArrangedAccounts> {
57        let mut iter = accounts.iter();
58
59        let token = next_account(&mut iter)?;
60        let owner = next_account(&mut iter)?;
61
62        let remaining = iter.as_slice();
63
64        Some(EnableMemoTransfersInstructionAccounts {
65            token,
66            owner,
67            remaining: remaining.to_vec(),
68        })
69    }
70}