carbon_cargo_decoder/instructions/
mod.rs1use crate::CargoDecoder;
3use crate::PROGRAM_ID;
4
5pub mod add_cargo;
6pub mod close_cargo_pod;
7pub mod close_token_account;
8pub mod consume_cargo;
9pub mod init_cargo_pod;
10pub mod init_cargo_type;
11pub mod init_cargo_type_for_next_seq_id;
12pub mod init_cargo_type_from_old_cargo_type;
13pub mod init_definition;
14pub mod legitimize_cargo;
15pub mod mint_to;
16pub mod remove_cargo;
17pub mod transfer_authority;
18pub mod transfer_cargo;
19pub mod update_cargo_pod;
20pub mod update_definition;
21pub mod update_pod_token_account;
22
23pub use self::add_cargo::*;
24pub use self::close_cargo_pod::*;
25pub use self::close_token_account::*;
26pub use self::consume_cargo::*;
27pub use self::init_cargo_pod::*;
28pub use self::init_cargo_type::*;
29pub use self::init_cargo_type_for_next_seq_id::*;
30pub use self::init_cargo_type_from_old_cargo_type::*;
31pub use self::init_definition::*;
32pub use self::legitimize_cargo::*;
33pub use self::mint_to::*;
34pub use self::remove_cargo::*;
35pub use self::transfer_authority::*;
36pub use self::transfer_cargo::*;
37pub use self::update_cargo_pod::*;
38pub use self::update_definition::*;
39pub use self::update_pod_token_account::*;
40
41#[derive(Debug, Clone, PartialEq, Eq, Hash)]
42#[cfg_attr(
43 feature = "serde",
44 derive(carbon_core::InstructionType, serde::Serialize, serde::Deserialize)
45)]
46#[cfg_attr(feature = "serde", serde(tag = "type", content = "data"))]
47pub enum CargoInstruction {
48 AddCargo(AddCargo),
49 CloseCargoPod(CloseCargoPod),
50 CloseTokenAccount(CloseTokenAccount),
51 ConsumeCargo(ConsumeCargo),
52 InitCargoPod(InitCargoPod),
53 InitCargoType(InitCargoType),
54 InitCargoTypeForNextSeqId(InitCargoTypeForNextSeqId),
55 InitCargoTypeFromOldCargoType(InitCargoTypeFromOldCargoType),
56 InitDefinition(InitDefinition),
57 LegitimizeCargo(LegitimizeCargo),
58 MintTo(MintTo),
59 RemoveCargo(RemoveCargo),
60 TransferAuthority(TransferAuthority),
61 TransferCargo(TransferCargo),
62 UpdateCargoPod(UpdateCargoPod),
63 UpdateDefinition(UpdateDefinition),
64 UpdatePodTokenAccount(UpdatePodTokenAccount),
65}
66
67impl carbon_core::instruction::InstructionDecoder<'_> for CargoDecoder {
68 type InstructionType = CargoInstruction;
69
70 fn decode_instruction(
71 &self,
72 instruction: &solana_instruction::Instruction,
73 ) -> Option<carbon_core::instruction::DecodedInstruction<Self::InstructionType>> {
74 if !instruction.program_id.eq(&PROGRAM_ID) {
75 return None;
76 }
77
78 let data = instruction.data.as_slice();
79
80 {
81 if let Some(decoded) = add_cargo::AddCargo::decode(data) {
82 return Some(carbon_core::instruction::DecodedInstruction {
83 program_id: instruction.program_id,
84 data: CargoInstruction::AddCargo(decoded),
85 accounts: instruction.accounts.clone(),
86 });
87 }
88 }
89 {
90 if let Some(decoded) = close_cargo_pod::CloseCargoPod::decode(data) {
91 return Some(carbon_core::instruction::DecodedInstruction {
92 program_id: instruction.program_id,
93 data: CargoInstruction::CloseCargoPod(decoded),
94 accounts: instruction.accounts.clone(),
95 });
96 }
97 }
98 {
99 if let Some(decoded) = close_token_account::CloseTokenAccount::decode(data) {
100 return Some(carbon_core::instruction::DecodedInstruction {
101 program_id: instruction.program_id,
102 data: CargoInstruction::CloseTokenAccount(decoded),
103 accounts: instruction.accounts.clone(),
104 });
105 }
106 }
107 {
108 if let Some(decoded) = consume_cargo::ConsumeCargo::decode(data) {
109 return Some(carbon_core::instruction::DecodedInstruction {
110 program_id: instruction.program_id,
111 data: CargoInstruction::ConsumeCargo(decoded),
112 accounts: instruction.accounts.clone(),
113 });
114 }
115 }
116 {
117 if let Some(decoded) = init_cargo_pod::InitCargoPod::decode(data) {
118 return Some(carbon_core::instruction::DecodedInstruction {
119 program_id: instruction.program_id,
120 data: CargoInstruction::InitCargoPod(decoded),
121 accounts: instruction.accounts.clone(),
122 });
123 }
124 }
125 {
126 if let Some(decoded) = init_cargo_type::InitCargoType::decode(data) {
127 return Some(carbon_core::instruction::DecodedInstruction {
128 program_id: instruction.program_id,
129 data: CargoInstruction::InitCargoType(decoded),
130 accounts: instruction.accounts.clone(),
131 });
132 }
133 }
134 {
135 if let Some(decoded) =
136 init_cargo_type_for_next_seq_id::InitCargoTypeForNextSeqId::decode(data)
137 {
138 return Some(carbon_core::instruction::DecodedInstruction {
139 program_id: instruction.program_id,
140 data: CargoInstruction::InitCargoTypeForNextSeqId(decoded),
141 accounts: instruction.accounts.clone(),
142 });
143 }
144 }
145 {
146 if let Some(decoded) =
147 init_cargo_type_from_old_cargo_type::InitCargoTypeFromOldCargoType::decode(data)
148 {
149 return Some(carbon_core::instruction::DecodedInstruction {
150 program_id: instruction.program_id,
151 data: CargoInstruction::InitCargoTypeFromOldCargoType(decoded),
152 accounts: instruction.accounts.clone(),
153 });
154 }
155 }
156 {
157 if let Some(decoded) = init_definition::InitDefinition::decode(data) {
158 return Some(carbon_core::instruction::DecodedInstruction {
159 program_id: instruction.program_id,
160 data: CargoInstruction::InitDefinition(decoded),
161 accounts: instruction.accounts.clone(),
162 });
163 }
164 }
165 {
166 if let Some(decoded) = legitimize_cargo::LegitimizeCargo::decode(data) {
167 return Some(carbon_core::instruction::DecodedInstruction {
168 program_id: instruction.program_id,
169 data: CargoInstruction::LegitimizeCargo(decoded),
170 accounts: instruction.accounts.clone(),
171 });
172 }
173 }
174 {
175 if let Some(decoded) = mint_to::MintTo::decode(data) {
176 return Some(carbon_core::instruction::DecodedInstruction {
177 program_id: instruction.program_id,
178 data: CargoInstruction::MintTo(decoded),
179 accounts: instruction.accounts.clone(),
180 });
181 }
182 }
183 {
184 if let Some(decoded) = remove_cargo::RemoveCargo::decode(data) {
185 return Some(carbon_core::instruction::DecodedInstruction {
186 program_id: instruction.program_id,
187 data: CargoInstruction::RemoveCargo(decoded),
188 accounts: instruction.accounts.clone(),
189 });
190 }
191 }
192 {
193 if let Some(decoded) = transfer_authority::TransferAuthority::decode(data) {
194 return Some(carbon_core::instruction::DecodedInstruction {
195 program_id: instruction.program_id,
196 data: CargoInstruction::TransferAuthority(decoded),
197 accounts: instruction.accounts.clone(),
198 });
199 }
200 }
201 {
202 if let Some(decoded) = transfer_cargo::TransferCargo::decode(data) {
203 return Some(carbon_core::instruction::DecodedInstruction {
204 program_id: instruction.program_id,
205 data: CargoInstruction::TransferCargo(decoded),
206 accounts: instruction.accounts.clone(),
207 });
208 }
209 }
210 {
211 if let Some(decoded) = update_cargo_pod::UpdateCargoPod::decode(data) {
212 return Some(carbon_core::instruction::DecodedInstruction {
213 program_id: instruction.program_id,
214 data: CargoInstruction::UpdateCargoPod(decoded),
215 accounts: instruction.accounts.clone(),
216 });
217 }
218 }
219 {
220 if let Some(decoded) = update_definition::UpdateDefinition::decode(data) {
221 return Some(carbon_core::instruction::DecodedInstruction {
222 program_id: instruction.program_id,
223 data: CargoInstruction::UpdateDefinition(decoded),
224 accounts: instruction.accounts.clone(),
225 });
226 }
227 }
228 {
229 if let Some(decoded) = update_pod_token_account::UpdatePodTokenAccount::decode(data) {
230 return Some(carbon_core::instruction::DecodedInstruction {
231 program_id: instruction.program_id,
232 data: CargoInstruction::UpdatePodTokenAccount(decoded),
233 accounts: instruction.accounts.clone(),
234 });
235 }
236 }
237
238 None
239 }
240}