fuel_gql_client/client/schema/tx/
transparent_receipt.rs

1use 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}