carbon_name_service_decoder/accounts/
mod.rs1use {
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}