fuel_gql_client/client/schema/tx/
transparent_receipt.rs1use crate::client::schema::{
2 contract::ContractIdFragment,
3 schema,
4 Address,
5 AssetId,
6 Bytes32,
7 ContractId,
8 ConversionError,
9 ConversionError::MissingField,
10 HexString,
11 MessageId,
12 U64,
13};
14use fuel_vm::fuel_types::Word;
15
16#[derive(cynic::QueryFragment, Debug)]
17#[cynic(schema_path = "./assets/schema.sdl")]
18pub struct Receipt {
19 pub param1: Option<U64>,
20 pub param2: Option<U64>,
21 pub amount: Option<U64>,
22 pub asset_id: Option<AssetId>,
23 pub gas: Option<U64>,
24 pub digest: Option<Bytes32>,
25 pub contract: Option<ContractIdFragment>,
26 pub is: Option<U64>,
27 pub pc: Option<U64>,
28 pub ptr: Option<U64>,
29 pub ra: Option<U64>,
30 pub rb: Option<U64>,
31 pub rc: Option<U64>,
32 pub rd: Option<U64>,
33 pub reason: Option<U64>,
34 pub receipt_type: ReceiptType,
35 pub to: Option<ContractIdFragment>,
36 pub to_address: Option<Address>,
37 pub val: Option<U64>,
38 pub len: Option<U64>,
39 pub result: Option<U64>,
40 pub gas_used: Option<U64>,
41 pub data: Option<HexString>,
42 pub message_id: Option<MessageId>,
43 pub sender: Option<Address>,
44 pub recipient: Option<Address>,
45 pub nonce: Option<Bytes32>,
46 pub contract_id: Option<ContractId>,
47}
48
49#[derive(cynic::Enum, Clone, Copy, Debug)]
50#[cynic(schema_path = "./assets/schema.sdl")]
51pub enum ReceiptType {
52 Call,
53 Return,
54 ReturnData,
55 Panic,
56 Revert,
57 Log,
58 LogData,
59 Transfer,
60 TransferOut,
61 ScriptResult,
62 MessageOut,
63}
64
65impl TryFrom<Receipt> for fuel_vm::prelude::Receipt {
66 type Error = ConversionError;
67
68 fn try_from(schema: Receipt) -> Result<Self, Self::Error> {
69 Ok(match schema.receipt_type {
70 ReceiptType::Call => fuel_vm::prelude::Receipt::Call {
71 id: schema
72 .contract
73 .ok_or_else(|| MissingField("contract".to_string()))?
74 .id
75 .into(),
76 to: schema
77 .to
78 .ok_or_else(|| MissingField("to".to_string()))?
79 .id
80 .into(),
81 amount: schema
82 .amount
83 .ok_or_else(|| MissingField("amount".to_string()))?
84 .into(),
85 asset_id: schema
86 .asset_id
87 .ok_or_else(|| MissingField("assetId".to_string()))?
88 .into(),
89 gas: schema
90 .gas
91 .ok_or_else(|| MissingField("gas".to_string()))?
92 .into(),
93 param1: schema
94 .param1
95 .ok_or_else(|| MissingField("param1".to_string()))?
96 .into(),
97 param2: schema
98 .param2
99 .ok_or_else(|| MissingField("param2".to_string()))?
100 .into(),
101 pc: schema
102 .pc
103 .ok_or_else(|| MissingField("pc".to_string()))?
104 .into(),
105 is: schema
106 .is
107 .ok_or_else(|| MissingField("is".to_string()))?
108 .into(),
109 },
110 ReceiptType::Return => fuel_vm::prelude::Receipt::Return {
111 id: schema
112 .contract
113 .ok_or_else(|| MissingField("contract".to_string()))?
114 .id
115 .into(),
116 val: schema
117 .val
118 .ok_or_else(|| MissingField("val".to_string()))?
119 .into(),
120 pc: schema
121 .pc
122 .ok_or_else(|| MissingField("pc".to_string()))?
123 .into(),
124 is: schema
125 .is
126 .ok_or_else(|| MissingField("is".to_string()))?
127 .into(),
128 },
129 ReceiptType::ReturnData => fuel_vm::prelude::Receipt::ReturnData {
130 id: schema
131 .contract
132 .ok_or_else(|| MissingField("contract".to_string()))?
133 .id
134 .into(),
135 ptr: schema
136 .ptr
137 .ok_or_else(|| MissingField("ptr".to_string()))?
138 .into(),
139 len: schema
140 .len
141 .ok_or_else(|| MissingField("len".to_string()))?
142 .into(),
143 digest: schema
144 .digest
145 .ok_or_else(|| MissingField("digest".to_string()))?
146 .into(),
147 data: schema
148 .data
149 .ok_or_else(|| MissingField("data".to_string()))?
150 .into(),
151 pc: schema
152 .pc
153 .ok_or_else(|| MissingField("pc".to_string()))?
154 .into(),
155 is: schema
156 .is
157 .ok_or_else(|| MissingField("is".to_string()))?
158 .into(),
159 },
160 ReceiptType::Panic => fuel_vm::prelude::Receipt::Panic {
161 id: schema
162 .contract
163 .ok_or_else(|| MissingField("contract".to_string()))?
164 .id
165 .into(),
166 reason: schema
167 .reason
168 .ok_or_else(|| MissingField("reason".to_string()))?
169 .into(),
170 pc: schema
171 .pc
172 .ok_or_else(|| MissingField("pc".to_string()))?
173 .into(),
174 is: schema
175 .is
176 .ok_or_else(|| MissingField("is".to_string()))?
177 .into(),
178 contract_id: schema.contract_id.map(Into::into),
179 },
180 ReceiptType::Revert => fuel_vm::prelude::Receipt::Revert {
181 id: schema
182 .contract
183 .ok_or_else(|| MissingField("contract".to_string()))?
184 .id
185 .into(),
186 ra: schema
187 .ra
188 .ok_or_else(|| MissingField("ra".to_string()))?
189 .into(),
190 pc: schema
191 .pc
192 .ok_or_else(|| MissingField("pc".to_string()))?
193 .into(),
194 is: schema
195 .is
196 .ok_or_else(|| MissingField("is".to_string()))?
197 .into(),
198 },
199 ReceiptType::Log => fuel_vm::prelude::Receipt::Log {
200 id: schema
201 .contract
202 .ok_or_else(|| MissingField("contract".to_string()))?
203 .id
204 .into(),
205 ra: schema
206 .ra
207 .ok_or_else(|| MissingField("ra".to_string()))?
208 .into(),
209 rb: schema
210 .rb
211 .ok_or_else(|| MissingField("rb".to_string()))?
212 .into(),
213 rc: schema
214 .rc
215 .ok_or_else(|| MissingField("rc".to_string()))?
216 .into(),
217 rd: schema
218 .rd
219 .ok_or_else(|| MissingField("rd".to_string()))?
220 .into(),
221 pc: schema
222 .pc
223 .ok_or_else(|| MissingField("pc".to_string()))?
224 .into(),
225 is: schema
226 .is
227 .ok_or_else(|| MissingField("is".to_string()))?
228 .into(),
229 },
230 ReceiptType::LogData => fuel_vm::prelude::Receipt::LogData {
231 id: schema
232 .contract
233 .ok_or_else(|| MissingField("contract".to_string()))?
234 .id
235 .into(),
236 ra: schema
237 .ra
238 .ok_or_else(|| MissingField("ra".to_string()))?
239 .into(),
240 rb: schema
241 .rb
242 .ok_or_else(|| MissingField("rb".to_string()))?
243 .into(),
244 ptr: schema
245 .ptr
246 .ok_or_else(|| MissingField("ptr".to_string()))?
247 .into(),
248 len: schema
249 .len
250 .ok_or_else(|| MissingField("len".to_string()))?
251 .into(),
252 digest: schema
253 .digest
254 .ok_or_else(|| MissingField("digest".to_string()))?
255 .into(),
256 data: schema
257 .data
258 .ok_or_else(|| MissingField("data".to_string()))?
259 .into(),
260 pc: schema
261 .pc
262 .ok_or_else(|| MissingField("pc".to_string()))?
263 .into(),
264 is: schema
265 .is
266 .ok_or_else(|| MissingField("is".to_string()))?
267 .into(),
268 },
269 ReceiptType::Transfer => fuel_vm::prelude::Receipt::Transfer {
270 id: schema
271 .contract
272 .ok_or_else(|| MissingField("contract".to_string()))?
273 .id
274 .into(),
275 to: schema
276 .to
277 .ok_or_else(|| MissingField("to".to_string()))?
278 .id
279 .into(),
280 amount: schema
281 .amount
282 .ok_or_else(|| MissingField("amount".to_string()))?
283 .into(),
284 asset_id: schema
285 .asset_id
286 .ok_or_else(|| MissingField("assetId".to_string()))?
287 .into(),
288 pc: schema
289 .pc
290 .ok_or_else(|| MissingField("pc".to_string()))?
291 .into(),
292 is: schema
293 .is
294 .ok_or_else(|| MissingField("is".to_string()))?
295 .into(),
296 },
297 ReceiptType::TransferOut => fuel_vm::prelude::Receipt::TransferOut {
298 id: schema
299 .contract
300 .ok_or_else(|| MissingField("contract".to_string()))?
301 .id
302 .into(),
303 to: schema
304 .to_address
305 .ok_or_else(|| MissingField("to_address".to_string()))?
306 .into(),
307 amount: schema
308 .amount
309 .ok_or_else(|| MissingField("amount".to_string()))?
310 .into(),
311 asset_id: schema
312 .asset_id
313 .ok_or_else(|| MissingField("assetId".to_string()))?
314 .into(),
315 pc: schema
316 .pc
317 .ok_or_else(|| MissingField("pc".to_string()))?
318 .into(),
319 is: schema
320 .is
321 .ok_or_else(|| MissingField("is".to_string()))?
322 .into(),
323 },
324 ReceiptType::ScriptResult => fuel_vm::prelude::Receipt::ScriptResult {
325 result: Word::from(
326 schema
327 .result
328 .ok_or_else(|| MissingField("result".to_string()))?,
329 )
330 .into(),
331 gas_used: schema
332 .gas_used
333 .ok_or_else(|| MissingField("gas_used".to_string()))?
334 .into(),
335 },
336 ReceiptType::MessageOut => ::fuel_vm::fuel_tx::Receipt::MessageOut {
337 message_id: schema
338 .message_id
339 .ok_or_else(|| MissingField("message_id".to_string()))?
340 .into(),
341 sender: schema
342 .sender
343 .ok_or_else(|| MissingField("sender".to_string()))?
344 .into(),
345 recipient: schema
346 .recipient
347 .ok_or_else(|| MissingField("recipient".to_string()))?
348 .into(),
349 amount: schema
350 .amount
351 .ok_or_else(|| MissingField("amount".to_string()))?
352 .into(),
353 nonce: schema
354 .nonce
355 .ok_or_else(|| MissingField("nonce".to_string()))?
356 .into(),
357 len: schema
358 .len
359 .ok_or_else(|| MissingField("len".to_string()))?
360 .into(),
361 digest: schema
362 .digest
363 .ok_or_else(|| MissingField("digest".to_string()))?
364 .into(),
365 data: schema
366 .data
367 .ok_or_else(|| MissingField("data".to_string()))?
368 .into(),
369 },
370 })
371 }
372}