noah_sdk/models/
transactions.rs

1//! Transaction-related models
2
3use crate::models::common::*;
4use crate::models::payment_methods::PaymentMethod;
5use serde::{Deserialize, Serialize};
6
7/// Fiat payment status
8#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
9#[serde(rename_all = "PascalCase")]
10pub enum FiatPaymentStatus {
11    /// Pending
12    Pending,
13    /// Failed
14    Failed,
15    /// Successful
16    Successful,
17}
18
19/// Fiat payment
20#[derive(Debug, Clone, Serialize, Deserialize)]
21pub struct FiatPayment {
22    /// Amount
23    #[serde(rename = "Amount")]
24    pub amount: PositiveDecimal,
25    /// Fee amount
26    #[serde(rename = "FeeAmount")]
27    pub fee_amount: PositiveDecimal,
28    /// Exchange rate
29    #[serde(rename = "Rate")]
30    pub rate: PositiveDecimal,
31    /// Fiat currency
32    #[serde(rename = "FiatCurrency")]
33    pub fiat_currency: FiatCurrencyCode,
34    /// Fiat deposit ID (optional)
35    #[serde(rename = "FiatDepositID")]
36    pub fiat_deposit_id: Option<String>,
37    /// Payment system ID (optional)
38    #[serde(rename = "PaymentSystemID")]
39    pub payment_system_id: Option<String>,
40}
41
42/// Transaction breakdown type
43#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
44#[serde(rename_all = "PascalCase")]
45pub enum TransactionBreakdownType {
46    /// Channel fee
47    ChannelFee,
48    /// Business fee
49    BusinessFee,
50    /// Remaining amount
51    Remaining,
52}
53
54/// Transaction breakdown item
55#[derive(Debug, Clone, Serialize, Deserialize)]
56pub struct TransactionBreakdownItem {
57    /// Breakdown type
58    #[serde(rename = "Type")]
59    pub breakdown_type: TransactionBreakdownType,
60    /// Amount
61    #[serde(rename = "Amount")]
62    pub amount: PositiveDecimal,
63}
64
65/// Transaction
66#[derive(Debug, Clone, Serialize, Deserialize)]
67pub struct Transaction {
68    /// Transaction ID
69    #[serde(rename = "ID")]
70    pub id: String,
71    /// Public ID (optional)
72    #[serde(rename = "PublicID")]
73    pub public_id: Option<String>,
74    /// Network
75    #[serde(rename = "Network")]
76    pub network: Network,
77    /// Created timestamp
78    #[serde(rename = "Created")]
79    pub created: DateTime,
80    /// Status
81    #[serde(rename = "Status")]
82    pub status: TransactionStatus,
83    /// Direction
84    #[serde(rename = "Direction")]
85    pub direction: TransactionDirection,
86    /// Customer ID (optional)
87    #[serde(rename = "CustomerID")]
88    pub customer_id: Option<CustomerID>,
89    /// External ID (optional)
90    #[serde(rename = "ExternalID")]
91    pub external_id: Option<ExternalID>,
92    /// Amount
93    #[serde(rename = "Amount")]
94    pub amount: PositiveDecimal,
95    /// Network fee (optional)
96    #[serde(rename = "NetworkFee")]
97    pub network_fee: Option<PositiveDecimal>,
98    /// Cryptocurrency
99    #[serde(rename = "CryptoCurrency")]
100    pub crypto_currency: CryptoCurrencyCode,
101    /// Fiat payment (optional)
102    #[serde(rename = "FiatPayment")]
103    pub fiat_payment: Option<FiatPayment>,
104    /// Orchestration (optional)
105    #[serde(rename = "Orchestration")]
106    pub orchestration: Option<serde_json::Value>,
107    /// Fiat payment method (optional)
108    #[serde(rename = "FiatPaymentMethod")]
109    pub fiat_payment_method: Option<PaymentMethod>,
110    /// Breakdown (optional)
111    #[serde(rename = "Breakdown")]
112    pub breakdown: Option<Vec<TransactionBreakdownItem>>,
113}
114
115/// Get transactions response
116#[derive(Debug, Clone, Serialize, Deserialize)]
117pub struct GetTransactionsResponse {
118    /// List of transactions
119    #[serde(rename = "Items")]
120    pub items: Vec<Transaction>,
121    /// Pagination token
122    #[serde(rename = "PageToken")]
123    pub page_token: Option<String>,
124}
125
126/// Prepare sell request
127#[derive(Debug, Clone, Serialize, Deserialize)]
128pub struct PrepareSellRequest {
129    /// Channel ID
130    #[serde(rename = "ChannelID")]
131    pub channel_id: ChannelID,
132    /// Payment method ID (optional)
133    #[serde(rename = "PaymentMethodID")]
134    pub payment_method_id: Option<PaymentMethodID>,
135    /// Cryptocurrency
136    #[serde(rename = "CryptoCurrency")]
137    pub crypto_currency: CryptoCurrencyCode,
138    /// Customer ID (optional)
139    #[serde(rename = "CustomerID")]
140    pub customer_id: Option<CustomerID>,
141    /// Fiat amount
142    #[serde(rename = "FiatAmount")]
143    pub fiat_amount: PositiveDecimal,
144    /// Form (optional)
145    #[serde(rename = "Form")]
146    pub form: Option<serde_json::Value>,
147    /// Delayed sell (optional)
148    #[serde(rename = "DelayedSell")]
149    pub delayed_sell: Option<bool>,
150}
151
152/// Prepare sell response
153#[derive(Debug, Clone, Serialize, Deserialize)]
154pub struct PrepareSellResponse {
155    /// Total fee
156    #[serde(rename = "TotalFee")]
157    pub total_fee: PositiveDecimal,
158    /// Crypto amount estimate
159    #[serde(rename = "CryptoAmountEstimate")]
160    pub crypto_amount_estimate: PositiveDecimal,
161    /// Crypto authorized amount
162    #[serde(rename = "CryptoAuthorizedAmount")]
163    pub crypto_authorized_amount: PositiveDecimal,
164    /// Form session ID
165    #[serde(rename = "FormSessionID")]
166    pub form_session_id: FormSessionID,
167}
168
169/// Sell request
170#[derive(Debug, Clone, Serialize, Deserialize)]
171pub struct SellRequest {
172    /// Cryptocurrency
173    #[serde(rename = "CryptoCurrency")]
174    pub crypto_currency: CryptoCurrencyCode,
175    /// Fiat amount
176    #[serde(rename = "FiatAmount")]
177    pub fiat_amount: PositiveDecimal,
178    /// Crypto authorized amount
179    #[serde(rename = "CryptoAuthorizedAmount")]
180    pub crypto_authorized_amount: PositiveDecimal,
181    /// Form session ID
182    #[serde(rename = "FormSessionID")]
183    pub form_session_id: FormSessionID,
184    /// Nonce
185    #[serde(rename = "Nonce")]
186    pub nonce: Nonce,
187    /// External ID (optional)
188    #[serde(rename = "ExternalID")]
189    pub external_id: Option<ExternalID>,
190}
191
192/// Sell response
193#[derive(Debug, Clone, Serialize, Deserialize)]
194pub struct SellResponse {
195    /// Transaction
196    #[serde(rename = "Transaction")]
197    pub transaction: Transaction,
198}