carbon_name_service_decoder/accounts/
mod.rs

1use {
2    super::NameDecoder,
3    crate::PROGRAM_ID,
4    carbon_core::{account::AccountDecoder, deserialize::CarbonDeserialize},
5};
6pub mod name_record_header;
7
8pub enum NameAccount {
9    NameRecordHeader(name_record_header::NameRecordHeader),
10}
11
12impl AccountDecoder<'_> for NameDecoder {
13    type AccountType = NameAccount;
14    fn decode_account(
15        &self,
16        account: &solana_account::Account,
17    ) -> Option<carbon_core::account::DecodedAccount<Self::AccountType>> {
18        if !account.owner.eq(&PROGRAM_ID) {
19            return None;
20        }
21
22        if let Some(decoded_account) =
23            name_record_header::NameRecordHeader::deserialize(account.data.as_slice())
24        {
25            return Some(carbon_core::account::DecodedAccount {
26                lamports: account.lamports,
27                data: NameAccount::NameRecordHeader(decoded_account),
28                owner: account.owner,
29                executable: account.executable,
30                rent_epoch: account.rent_epoch,
31            });
32        }
33
34        None
35    }
36}