noah_sdk/api/
checkout.rs

1//! Checkout API
2
3use crate::client::NoahClient;
4use crate::error::Result;
5use crate::models::checkout::CheckoutSessionResponse;
6use crate::models::common::*;
7use serde::Serialize;
8
9/// Crypto payin request
10#[derive(Debug, Clone, Serialize)]
11pub struct CryptoPayinRequest {
12    /// Cryptocurrency
13    #[serde(rename = "CryptoCurrency")]
14    pub crypto_currency: CryptoCurrencyCode,
15    /// Crypto amount
16    #[serde(rename = "CryptoAmount")]
17    pub crypto_amount: PositiveDecimal,
18    /// Return URL
19    #[serde(rename = "ReturnURL")]
20    pub return_url: ReturnURL,
21    /// Customer ID
22    #[serde(rename = "CustomerID")]
23    pub customer_id: CustomerID,
24    /// External ID (optional)
25    #[serde(rename = "ExternalID")]
26    #[serde(skip_serializing_if = "Option::is_none")]
27    pub external_id: Option<ExternalID>,
28    /// Customer (optional)
29    #[serde(rename = "Customer")]
30    #[serde(skip_serializing_if = "Option::is_none")]
31    pub customer: Option<serde_json::Value>,
32    /// Line items
33    #[serde(rename = "LineItems")]
34    pub line_items: crate::models::checkout::LineItems,
35    /// Nonce
36    #[serde(rename = "Nonce")]
37    pub nonce: Nonce,
38}
39
40/// Fiat payin request
41#[derive(Debug, Clone, Serialize)]
42pub struct FiatPayinRequest {
43    /// Payment method category
44    #[serde(rename = "PaymentMethodCategory")]
45    pub payment_method_category: PaymentMethodCategory,
46    /// Fiat currency
47    #[serde(rename = "FiatCurrency")]
48    pub fiat_currency: FiatCurrencyCode,
49    /// Cryptocurrency
50    #[serde(rename = "CryptoCurrency")]
51    pub crypto_currency: CryptoCurrencyCode,
52    /// Fiat amount
53    #[serde(rename = "FiatAmount")]
54    pub fiat_amount: PositiveDecimal,
55    /// Return URL
56    #[serde(rename = "ReturnURL")]
57    pub return_url: ReturnURL,
58    /// Customer ID
59    #[serde(rename = "CustomerID")]
60    pub customer_id: CustomerID,
61    /// External ID (optional)
62    #[serde(rename = "ExternalID")]
63    #[serde(skip_serializing_if = "Option::is_none")]
64    pub external_id: Option<ExternalID>,
65    /// Customer (optional)
66    #[serde(rename = "Customer")]
67    #[serde(skip_serializing_if = "Option::is_none")]
68    pub customer: Option<serde_json::Value>,
69    /// Line items
70    #[serde(rename = "LineItems")]
71    pub line_items: crate::models::checkout::LineItems,
72    /// Nonce
73    #[serde(rename = "Nonce")]
74    pub nonce: Nonce,
75}
76
77/// Fiat payout request
78#[derive(Debug, Clone, Serialize)]
79pub struct FiatPayoutRequest {
80    /// Cryptocurrency
81    #[serde(rename = "CryptoCurrency")]
82    pub crypto_currency: CryptoCurrencyCode,
83    /// Fiat currency
84    #[serde(rename = "FiatCurrency")]
85    pub fiat_currency: FiatCurrencyCode,
86    /// Fiat amount
87    #[serde(rename = "FiatAmount")]
88    pub fiat_amount: PositiveDecimal,
89    /// Crypto authorized amount
90    #[serde(rename = "CryptoAuthorizedAmount")]
91    pub crypto_authorized_amount: PositiveDecimal,
92    /// Return URL
93    #[serde(rename = "ReturnURL")]
94    pub return_url: ReturnURL,
95    /// Customer ID
96    #[serde(rename = "CustomerID")]
97    pub customer_id: CustomerID,
98    /// External ID (optional)
99    #[serde(rename = "ExternalID")]
100    #[serde(skip_serializing_if = "Option::is_none")]
101    pub external_id: Option<ExternalID>,
102    /// Customer (optional)
103    #[serde(rename = "Customer")]
104    #[serde(skip_serializing_if = "Option::is_none")]
105    pub customer: Option<serde_json::Value>,
106    /// Line items
107    #[serde(rename = "LineItems")]
108    pub line_items: crate::models::checkout::LineItems,
109    /// Nonce
110    #[serde(rename = "Nonce")]
111    pub nonce: Nonce,
112}
113
114impl NoahClient {
115    /// Create crypto payin session (async)
116    #[cfg(feature = "async")]
117    pub async fn create_crypto_payin_session(
118        &self,
119        request: &CryptoPayinRequest,
120    ) -> Result<CheckoutSessionResponse> {
121        self.post("/checkout/payin/crypto", request).await
122    }
123
124    /// Create crypto payin session (blocking)
125    #[cfg(feature = "sync")]
126    pub fn create_crypto_payin_session_blocking(
127        &self,
128        request: &CryptoPayinRequest,
129    ) -> Result<CheckoutSessionResponse> {
130        self.post_blocking("/checkout/payin/crypto", request)
131    }
132
133    /// Create fiat payin session (async)
134    #[cfg(feature = "async")]
135    pub async fn create_fiat_payin_session(
136        &self,
137        request: &FiatPayinRequest,
138    ) -> Result<CheckoutSessionResponse> {
139        self.post("/checkout/payin/fiat", request).await
140    }
141
142    /// Create fiat payin session (blocking)
143    #[cfg(feature = "sync")]
144    pub fn create_fiat_payin_session_blocking(
145        &self,
146        request: &FiatPayinRequest,
147    ) -> Result<CheckoutSessionResponse> {
148        self.post_blocking("/checkout/payin/fiat", request)
149    }
150
151    /// Create fiat payout session (async)
152    #[cfg(feature = "async")]
153    pub async fn create_fiat_payout_session(
154        &self,
155        request: &FiatPayoutRequest,
156    ) -> Result<CheckoutSessionResponse> {
157        self.post("/checkout/payout/fiat", request).await
158    }
159
160    /// Create fiat payout session (blocking)
161    #[cfg(feature = "sync")]
162    pub fn create_fiat_payout_session_blocking(
163        &self,
164        request: &FiatPayoutRequest,
165    ) -> Result<CheckoutSessionResponse> {
166        self.post_blocking("/checkout/payout/fiat", request)
167    }
168}