carbon_mpl_token_metadata_decoder/accounts/
mod.rs1use crate::{MplTokenMetadataDecoder, PROGRAM_ID};
3
4#[cfg(feature = "postgres")]
5pub mod postgres;
6
7#[cfg(feature = "graphql")]
8pub mod graphql;
9
10pub mod collection_authority_record;
11pub mod edition;
12pub mod edition_marker;
13pub mod edition_marker_v2;
14pub mod holder_delegate_record;
15pub mod master_edition_v1;
16pub mod master_edition_v2;
17pub mod metadata;
18pub mod metadata_delegate_record;
19pub mod reservation_list_v1;
20pub mod reservation_list_v2;
21pub mod token_owned_escrow;
22pub mod token_record;
23pub mod use_authority_record;
24
25#[derive(Debug, Clone, PartialEq)]
26#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
27#[cfg_attr(feature = "serde", serde(tag = "type", content = "data"))]
28pub enum MplTokenMetadataAccount {
29 CollectionAuthorityRecord(Box<collection_authority_record::CollectionAuthorityRecord>),
30 Edition(Box<edition::Edition>),
31 EditionMarker(Box<edition_marker::EditionMarker>),
32 EditionMarkerV2(Box<edition_marker_v2::EditionMarkerV2>),
33 HolderDelegateRecord(Box<holder_delegate_record::HolderDelegateRecord>),
34 MasterEditionV1(Box<master_edition_v1::MasterEditionV1>),
35 MasterEditionV2(Box<master_edition_v2::MasterEditionV2>),
36 Metadata(Box<metadata::Metadata>),
37 MetadataDelegateRecord(Box<metadata_delegate_record::MetadataDelegateRecord>),
38 ReservationListV1(Box<reservation_list_v1::ReservationListV1>),
39 ReservationListV2(Box<reservation_list_v2::ReservationListV2>),
40 TokenOwnedEscrow(Box<token_owned_escrow::TokenOwnedEscrow>),
41 TokenRecord(Box<token_record::TokenRecord>),
42 UseAuthorityRecord(Box<use_authority_record::UseAuthorityRecord>),
43}
44
45impl<'a> carbon_core::account::AccountDecoder<'a> for MplTokenMetadataDecoder {
46 type AccountType = MplTokenMetadataAccount;
47
48 fn decode_account(
49 &self,
50 account: &'a solana_account::Account,
51 ) -> Option<carbon_core::account::DecodedAccount<Self::AccountType>> {
52 if account.owner != PROGRAM_ID {
53 return None;
54 }
55
56 let data = account.data.as_slice();
57
58 {
59 if let Some(decoded) =
60 collection_authority_record::CollectionAuthorityRecord::decode(data)
61 {
62 return Some(carbon_core::account::DecodedAccount {
63 lamports: account.lamports,
64 data: MplTokenMetadataAccount::CollectionAuthorityRecord(Box::new(decoded)),
65 owner: account.owner,
66 executable: account.executable,
67 rent_epoch: account.rent_epoch,
68 });
69 }
70 }
71 {
72 if let Some(decoded) = metadata_delegate_record::MetadataDelegateRecord::decode(data) {
73 return Some(carbon_core::account::DecodedAccount {
74 lamports: account.lamports,
75 data: MplTokenMetadataAccount::MetadataDelegateRecord(Box::new(decoded)),
76 owner: account.owner,
77 executable: account.executable,
78 rent_epoch: account.rent_epoch,
79 });
80 }
81 }
82 {
83 if let Some(decoded) = holder_delegate_record::HolderDelegateRecord::decode(data) {
84 return Some(carbon_core::account::DecodedAccount {
85 lamports: account.lamports,
86 data: MplTokenMetadataAccount::HolderDelegateRecord(Box::new(decoded)),
87 owner: account.owner,
88 executable: account.executable,
89 rent_epoch: account.rent_epoch,
90 });
91 }
92 }
93 {
94 if let Some(decoded) = edition::Edition::decode(data) {
95 return Some(carbon_core::account::DecodedAccount {
96 lamports: account.lamports,
97 data: MplTokenMetadataAccount::Edition(Box::new(decoded)),
98 owner: account.owner,
99 executable: account.executable,
100 rent_epoch: account.rent_epoch,
101 });
102 }
103 }
104 {
105 if let Some(decoded) = edition_marker::EditionMarker::decode(data) {
106 return Some(carbon_core::account::DecodedAccount {
107 lamports: account.lamports,
108 data: MplTokenMetadataAccount::EditionMarker(Box::new(decoded)),
109 owner: account.owner,
110 executable: account.executable,
111 rent_epoch: account.rent_epoch,
112 });
113 }
114 }
115 {
116 if let Some(decoded) = edition_marker_v2::EditionMarkerV2::decode(data) {
117 return Some(carbon_core::account::DecodedAccount {
118 lamports: account.lamports,
119 data: MplTokenMetadataAccount::EditionMarkerV2(Box::new(decoded)),
120 owner: account.owner,
121 executable: account.executable,
122 rent_epoch: account.rent_epoch,
123 });
124 }
125 }
126 {
127 if let Some(decoded) = token_owned_escrow::TokenOwnedEscrow::decode(data) {
128 return Some(carbon_core::account::DecodedAccount {
129 lamports: account.lamports,
130 data: MplTokenMetadataAccount::TokenOwnedEscrow(Box::new(decoded)),
131 owner: account.owner,
132 executable: account.executable,
133 rent_epoch: account.rent_epoch,
134 });
135 }
136 }
137 {
138 if let Some(decoded) = master_edition_v2::MasterEditionV2::decode(data) {
139 return Some(carbon_core::account::DecodedAccount {
140 lamports: account.lamports,
141 data: MplTokenMetadataAccount::MasterEditionV2(Box::new(decoded)),
142 owner: account.owner,
143 executable: account.executable,
144 rent_epoch: account.rent_epoch,
145 });
146 }
147 }
148 {
149 if let Some(decoded) = master_edition_v1::MasterEditionV1::decode(data) {
150 return Some(carbon_core::account::DecodedAccount {
151 lamports: account.lamports,
152 data: MplTokenMetadataAccount::MasterEditionV1(Box::new(decoded)),
153 owner: account.owner,
154 executable: account.executable,
155 rent_epoch: account.rent_epoch,
156 });
157 }
158 }
159 {
160 if let Some(decoded) = metadata::Metadata::decode(data) {
161 return Some(carbon_core::account::DecodedAccount {
162 lamports: account.lamports,
163 data: MplTokenMetadataAccount::Metadata(Box::new(decoded)),
164 owner: account.owner,
165 executable: account.executable,
166 rent_epoch: account.rent_epoch,
167 });
168 }
169 }
170 {
171 if let Some(decoded) = token_record::TokenRecord::decode(data) {
172 return Some(carbon_core::account::DecodedAccount {
173 lamports: account.lamports,
174 data: MplTokenMetadataAccount::TokenRecord(Box::new(decoded)),
175 owner: account.owner,
176 executable: account.executable,
177 rent_epoch: account.rent_epoch,
178 });
179 }
180 }
181 {
182 if let Some(decoded) = reservation_list_v2::ReservationListV2::decode(data) {
183 return Some(carbon_core::account::DecodedAccount {
184 lamports: account.lamports,
185 data: MplTokenMetadataAccount::ReservationListV2(Box::new(decoded)),
186 owner: account.owner,
187 executable: account.executable,
188 rent_epoch: account.rent_epoch,
189 });
190 }
191 }
192 {
193 if let Some(decoded) = reservation_list_v1::ReservationListV1::decode(data) {
194 return Some(carbon_core::account::DecodedAccount {
195 lamports: account.lamports,
196 data: MplTokenMetadataAccount::ReservationListV1(Box::new(decoded)),
197 owner: account.owner,
198 executable: account.executable,
199 rent_epoch: account.rent_epoch,
200 });
201 }
202 }
203 {
204 if let Some(decoded) = use_authority_record::UseAuthorityRecord::decode(data) {
205 return Some(carbon_core::account::DecodedAccount {
206 lamports: account.lamports,
207 data: MplTokenMetadataAccount::UseAuthorityRecord(Box::new(decoded)),
208 owner: account.owner,
209 executable: account.executable,
210 rent_epoch: account.rent_epoch,
211 });
212 }
213 }
214
215 None
216 }
217}