etopay_sdk/wallet/
tx_version.rs1use chrono::{DateTime, Utc};
2use etopay_wallet::types::{CryptoAmount, WalletTransaction};
3use serde::{Deserialize, Serialize};
4
5use crate::types::WalletTxStatus;
6
7#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
8pub struct WalletTxInfoV1 {
14 pub date: DateTime<Utc>,
16 pub block_number_hash: Option<(u64, String)>,
18 pub transaction_hash: String,
20 pub sender: String,
22 pub receiver: String,
24 pub amount: CryptoAmount,
26 pub network_key: String,
28 pub status: WalletTxStatus,
30 pub explorer_url: Option<String>,
32}
33
34#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
35pub enum VersionedWalletTransaction {
37 V1(WalletTxInfoV1),
39 V2(WalletTransaction),
41}
42
43impl VersionedWalletTransaction {
44 pub fn date(&self) -> DateTime<Utc> {
46 match self {
47 VersionedWalletTransaction::V1(w) => w.date,
48 VersionedWalletTransaction::V2(w) => w.date,
49 }
50 }
51
52 pub fn transaction_hash(&self) -> &str {
54 match self {
55 VersionedWalletTransaction::V1(v1) => &v1.transaction_hash,
56 VersionedWalletTransaction::V2(v2) => &v2.transaction_hash,
57 }
58 }
59
60 pub fn network_key(&self) -> &str {
62 match self {
63 VersionedWalletTransaction::V1(v1) => &v1.network_key,
64 VersionedWalletTransaction::V2(v2) => &v2.network_key,
65 }
66 }
67
68 pub fn status(&self) -> WalletTxStatus {
70 match self {
71 VersionedWalletTransaction::V1(v1) => v1.status,
72 VersionedWalletTransaction::V2(v2) => v2.status,
73 }
74 }
75}
76
77impl From<WalletTransaction> for VersionedWalletTransaction {
78 fn from(value: WalletTransaction) -> Self {
79 Self::V2(WalletTransaction {
80 date: value.date,
81 block_number_hash: value.block_number_hash,
82 transaction_hash: value.transaction_hash,
83 sender: value.sender,
84 receiver: value.receiver,
85 amount: value.amount,
86 network_key: value.network_key,
87 status: value.status,
88 explorer_url: value.explorer_url,
89 gas_fee: value.gas_fee,
90 is_sender: value.is_sender,
91 })
92 }
93}
94
95impl From<VersionedWalletTransaction> for WalletTransaction {
96 fn from(value: VersionedWalletTransaction) -> Self {
97 match value {
98 VersionedWalletTransaction::V1(v1) => WalletTransaction {
99 date: v1.date,
100 block_number_hash: v1.block_number_hash,
101 transaction_hash: v1.transaction_hash,
102 sender: v1.sender,
103 receiver: v1.receiver,
104 amount: v1.amount,
105 network_key: v1.network_key,
106 status: v1.status,
107 explorer_url: v1.explorer_url,
108 gas_fee: None,
109 is_sender: false,
110 },
111 VersionedWalletTransaction::V2(v2) => v2,
112 }
113 }
114}