1use serde::{Deserialize, Serialize};
2use std::collections::HashMap;
3
4#[derive(Debug, Clone, Serialize, Deserialize)]
5pub struct Invoice {
6 pub id: String,
7 #[serde(default)]
8 pub merchant_id: String,
9 #[serde(rename = "fiat_amount")]
10 pub amount: f64,
11 #[serde(rename = "fiat_currency")]
12 pub currency: String,
13 pub status: String,
14 #[serde(default)]
15 pub network: String,
16 #[serde(default)]
17 pub crypto_currency: String,
18 #[serde(default)]
19 pub crypto_amount: f64,
20 #[serde(rename = "deposit_address", default)]
21 pub wallet_address: String,
22 #[serde(default)]
23 pub customer_email: String,
24 #[serde(default)]
25 pub customer_name: String,
26 #[serde(default)]
27 pub merchant_order_id: String,
28 #[serde(default)]
29 pub callback_url: String,
30 #[serde(default)]
31 pub return_url: String,
32 #[serde(default)]
33 pub metadata: Option<HashMap<String, serde_json::Value>>,
34 #[serde(default)]
35 pub payment_url: String,
36 #[serde(default)]
37 pub tx_hash: String,
38 #[serde(rename = "received_amount", default)]
39 pub paid_amount: f64,
40 #[serde(default)]
41 pub confirmations: i32,
42 #[serde(default)]
43 pub required_confirmations: i32,
44 #[serde(default)]
45 pub expires_at: String,
46 #[serde(default)]
47 pub created_at: String,
48 #[serde(default)]
49 pub updated_at: String,
50}
51
52#[derive(Debug, Clone, Serialize, Default)]
57pub struct CreateInvoiceParams {
58 pub amount: f64,
59 #[serde(skip_serializing_if = "Option::is_none")]
60 pub currency: Option<String>,
61 #[serde(skip_serializing_if = "Option::is_none")]
62 pub network: Option<String>,
63 #[serde(skip_serializing_if = "Option::is_none")]
64 pub crypto_currency: Option<String>,
65 #[serde(skip_serializing_if = "Option::is_none")]
66 pub merchant_order_id: Option<String>,
67 #[serde(skip_serializing_if = "Option::is_none")]
68 pub customer_email: Option<String>,
69 #[serde(skip_serializing_if = "Option::is_none")]
70 pub customer_name: Option<String>,
71 #[serde(skip_serializing_if = "Option::is_none")]
72 pub callback_url: Option<String>,
73 #[serde(skip_serializing_if = "Option::is_none")]
74 pub return_url: Option<String>,
75 #[serde(skip_serializing_if = "Option::is_none")]
76 pub metadata: Option<HashMap<String, serde_json::Value>>,
77}
78
79#[derive(Debug, Clone, Serialize, Deserialize)]
80pub struct Payout {
81 pub id: String,
82 pub network: String,
83 pub currency: String,
84 pub status: String,
85 #[serde(default)]
86 pub gross_amount: f64,
87 #[serde(default)]
88 pub net_amount: f64,
89 #[serde(default)]
90 pub fee_amount: f64,
91 #[serde(default)]
92 pub nmc_amount: Option<f64>,
93 #[serde(default)]
94 pub recipient_address: String,
95 #[serde(default)]
96 pub reference_id: Option<String>,
97 #[serde(default)]
98 pub batch_id: Option<String>,
99 #[serde(default)]
100 pub tx_hash: String,
101 #[serde(default)]
102 pub error_message: Option<String>,
103 #[serde(default)]
104 pub created_at: String,
105 #[serde(default)]
106 pub completed_at: Option<String>,
107}
108
109#[derive(Debug, Clone, Serialize, Default)]
110pub struct CreatePayoutParams {
111 pub amount: f64,
112 pub currency: String,
113 pub network: String,
114 pub recipient_address: String,
115 #[serde(skip_serializing_if = "Option::is_none")]
116 pub reference_id: Option<String>,
117}
118
119#[derive(Debug, Clone, Serialize, Deserialize)]
120pub struct Wallet {
121 pub id: String,
122 pub address: String,
123 pub network: String,
124 pub currency: String,
125 #[serde(default)]
126 pub balance: f64,
127 #[serde(default)]
128 pub label: String,
129 #[serde(default)]
130 pub created_at: String,
131}
132
133#[derive(Debug, Clone, Serialize, Default)]
134pub struct GenerateWalletParams {
135 pub network: String,
136 pub currency: String,
137 #[serde(skip_serializing_if = "Option::is_none")]
138 pub label: Option<String>,
139}
140
141#[derive(Debug, Clone, Serialize, Deserialize)]
142pub struct SwapQuote {
143 pub from_currency: String,
144 pub to_currency: String,
145 pub from_amount: f64,
146 pub to_amount: f64,
147 pub rate: f64,
148 #[serde(default)]
149 pub expires_at: String,
150}
151
152#[derive(Debug, Clone, Serialize, Deserialize)]
153pub struct Swap {
154 pub id: String,
155 pub from_currency: String,
156 pub to_currency: String,
157 pub from_amount: f64,
158 pub to_amount: f64,
159 pub rate: f64,
160 pub status: String,
161 #[serde(default)]
162 pub tx_hash: String,
163 #[serde(default)]
164 pub created_at: String,
165}
166
167#[derive(Debug, Clone, Serialize, Default)]
168pub struct SwapParams {
169 pub from_currency: String,
170 pub to_currency: String,
171 pub amount: f64,
172}
173
174#[derive(Debug, Clone, Serialize, Deserialize)]
175pub struct WebhookEvent {
176 pub id: String,
177 #[serde(rename = "type")]
178 pub event_type: String,
179 pub data: HashMap<String, serde_json::Value>,
180 #[serde(default)]
181 pub created_at: String,
182}
183
184#[derive(Debug, Clone, Serialize, Default)]
185pub struct ListParams {
186 #[serde(skip_serializing_if = "Option::is_none")]
187 pub page: Option<i32>,
188 #[serde(skip_serializing_if = "Option::is_none")]
189 pub limit: Option<i32>,
190 #[serde(skip_serializing_if = "Option::is_none")]
191 pub status: Option<String>,
192 #[serde(skip_serializing_if = "Option::is_none")]
193 pub currency: Option<String>,
194 #[serde(skip_serializing_if = "Option::is_none")]
195 pub network: Option<String>,
196}
197
198#[derive(Debug, Clone, Deserialize)]
199pub struct PaginatedList<T> {
200 pub items: Vec<T>,
201 pub total: i64,
202 pub page: i64,
203 pub per_page: i64,
204 pub has_more: bool,
205}