1use crate::client::NoahClient;
4use crate::error::Result;
5use crate::models::checkout::CheckoutSessionResponse;
6use crate::models::common::*;
7use serde::Serialize;
8
9#[derive(Debug, Clone, Serialize)]
11pub struct CryptoPayinRequest {
12 #[serde(rename = "CryptoCurrency")]
14 pub crypto_currency: CryptoCurrencyCode,
15 #[serde(rename = "CryptoAmount")]
17 pub crypto_amount: PositiveDecimal,
18 #[serde(rename = "ReturnURL")]
20 pub return_url: ReturnURL,
21 #[serde(rename = "CustomerID")]
23 pub customer_id: CustomerID,
24 #[serde(rename = "ExternalID")]
26 #[serde(skip_serializing_if = "Option::is_none")]
27 pub external_id: Option<ExternalID>,
28 #[serde(rename = "Customer")]
30 #[serde(skip_serializing_if = "Option::is_none")]
31 pub customer: Option<serde_json::Value>,
32 #[serde(rename = "LineItems")]
34 pub line_items: crate::models::checkout::LineItems,
35 #[serde(rename = "Nonce")]
37 pub nonce: Nonce,
38}
39
40#[derive(Debug, Clone, Serialize)]
42pub struct FiatPayinRequest {
43 #[serde(rename = "PaymentMethodCategory")]
45 pub payment_method_category: PaymentMethodCategory,
46 #[serde(rename = "FiatCurrency")]
48 pub fiat_currency: FiatCurrencyCode,
49 #[serde(rename = "CryptoCurrency")]
51 pub crypto_currency: CryptoCurrencyCode,
52 #[serde(rename = "FiatAmount")]
54 pub fiat_amount: PositiveDecimal,
55 #[serde(rename = "ReturnURL")]
57 pub return_url: ReturnURL,
58 #[serde(rename = "CustomerID")]
60 pub customer_id: CustomerID,
61 #[serde(rename = "ExternalID")]
63 #[serde(skip_serializing_if = "Option::is_none")]
64 pub external_id: Option<ExternalID>,
65 #[serde(rename = "Customer")]
67 #[serde(skip_serializing_if = "Option::is_none")]
68 pub customer: Option<serde_json::Value>,
69 #[serde(rename = "LineItems")]
71 pub line_items: crate::models::checkout::LineItems,
72 #[serde(rename = "Nonce")]
74 pub nonce: Nonce,
75}
76
77#[derive(Debug, Clone, Serialize)]
79pub struct FiatPayoutRequest {
80 #[serde(rename = "CryptoCurrency")]
82 pub crypto_currency: CryptoCurrencyCode,
83 #[serde(rename = "FiatCurrency")]
85 pub fiat_currency: FiatCurrencyCode,
86 #[serde(rename = "FiatAmount")]
88 pub fiat_amount: PositiveDecimal,
89 #[serde(rename = "CryptoAuthorizedAmount")]
91 pub crypto_authorized_amount: PositiveDecimal,
92 #[serde(rename = "ReturnURL")]
94 pub return_url: ReturnURL,
95 #[serde(rename = "CustomerID")]
97 pub customer_id: CustomerID,
98 #[serde(rename = "ExternalID")]
100 #[serde(skip_serializing_if = "Option::is_none")]
101 pub external_id: Option<ExternalID>,
102 #[serde(rename = "Customer")]
104 #[serde(skip_serializing_if = "Option::is_none")]
105 pub customer: Option<serde_json::Value>,
106 #[serde(rename = "LineItems")]
108 pub line_items: crate::models::checkout::LineItems,
109 #[serde(rename = "Nonce")]
111 pub nonce: Nonce,
112}
113
114impl NoahClient {
115 #[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 #[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 #[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 #[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 #[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 #[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}