fuels_types/
transaction_response.rs1#![cfg(feature = "std")]
2
3use std::str::FromStr;
4
5use chrono::{DateTime, NaiveDateTime, Utc};
6use fuel_core_client::client::types::{
7 TransactionResponse as ClientTransactionResponse, TransactionStatus as ClientTransactionStatus,
8};
9use fuel_tx::{Bytes32, Transaction};
10
11#[derive(Debug, Clone)]
12pub struct TransactionResponse {
13 pub transaction: Transaction,
14 pub status: TransactionStatus,
15 pub block_id: Option<Bytes32>,
16 pub time: Option<DateTime<Utc>>,
17}
18
19#[derive(Debug, Clone)]
20pub enum TransactionStatus {
21 Submitted(),
22 Success(),
23 Failure(),
24 SqueezedOut(),
25}
26
27impl From<ClientTransactionResponse> for TransactionResponse {
28 fn from(client_response: ClientTransactionResponse) -> Self {
29 let block_id = match &client_response.status {
30 ClientTransactionStatus::Submitted { .. }
31 | ClientTransactionStatus::SqueezedOut { .. } => None,
32 ClientTransactionStatus::Success { block_id, .. }
33 | ClientTransactionStatus::Failure { block_id, .. } => Some(block_id),
34 };
35 let block_id = block_id.map(|id| {
36 Bytes32::from_str(id).expect("Client returned block id with invalid format.")
37 });
38
39 let time = match &client_response.status {
40 ClientTransactionStatus::Submitted { .. }
41 | ClientTransactionStatus::SqueezedOut { .. } => None,
42 ClientTransactionStatus::Success { time, .. }
43 | ClientTransactionStatus::Failure { time, .. } => {
44 let native = NaiveDateTime::from_timestamp_opt(time.to_unix(), 0);
45 native.map(|time| DateTime::<Utc>::from_utc(time, Utc))
46 }
47 };
48
49 Self {
50 transaction: client_response.transaction,
51 status: client_response.status.into(),
52 block_id,
53 time,
54 }
55 }
56}
57
58impl From<ClientTransactionStatus> for TransactionStatus {
59 fn from(client_status: ClientTransactionStatus) -> Self {
60 match client_status {
61 ClientTransactionStatus::Submitted { .. } => TransactionStatus::Submitted(),
62 ClientTransactionStatus::Success { .. } => TransactionStatus::Success(),
63 ClientTransactionStatus::Failure { .. } => TransactionStatus::Failure(),
64 ClientTransactionStatus::SqueezedOut { .. } => TransactionStatus::SqueezedOut(),
65 }
66 }
67}