carbon_name_service_decoder/instructions/
create.rs

1use carbon_core::{borsh, CarbonDeserialize};
2
3#[derive(
4    CarbonDeserialize, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Clone, Hash,
5)]
6#[carbon(discriminator = "0x00")]
7pub struct Create {
8    pub hashed_name: Vec<u8>,
9    pub lamports: u64,
10    pub space: u32,
11}
12
13pub struct CreateInstructionAccounts {
14    pub system_program: solana_pubkey::Pubkey,
15    pub funding_account: solana_pubkey::Pubkey,
16    pub name_record: solana_pubkey::Pubkey,
17    pub account_class: solana_pubkey::Pubkey,
18    pub parent_name_record: solana_pubkey::Pubkey,
19    pub parent_name_record_class: solana_pubkey::Pubkey,
20}
21
22impl carbon_core::deserialize::ArrangeAccounts for Create {
23    type ArrangedAccounts = CreateInstructionAccounts;
24
25    fn arrange_accounts(
26        accounts: &[solana_instruction::AccountMeta],
27    ) -> Option<Self::ArrangedAccounts> {
28        let [system_program, funding_account, name_record, account_class, parent_name_record, parent_name_record_class, _remaining @ ..] =
29            accounts
30        else {
31            return None;
32        };
33
34        Some(CreateInstructionAccounts {
35            system_program: system_program.pubkey,
36            funding_account: funding_account.pubkey,
37            name_record: name_record.pubkey,
38            account_class: account_class.pubkey,
39            parent_name_record: parent_name_record.pubkey,
40            parent_name_record_class: parent_name_record_class.pubkey,
41        })
42    }
43}