Skip to main content

vylth_flow/
types.rs

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/// Parameters for creating an invoice.
53///
54/// Omit `network` and `crypto_currency` for a flex invoice (customer picks
55/// crypto on the payment page). Supply both to lock the rate at creation.
56#[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}