noah_sdk/models/
payment_methods.rs

1//! Payment method-related models
2
3use crate::models::common::*;
4use serde::{Deserialize, Serialize};
5
6/// Payment method display details (discriminated union)
7#[derive(Debug, Clone, Serialize, Deserialize)]
8#[serde(tag = "Type")]
9pub enum PaymentMethodDisplayDetails {
10    /// Bank display
11    #[serde(rename = "FiatPaymentMethodBankDisplay")]
12    Bank(FiatPaymentMethodBankDisplay),
13    /// Card display
14    #[serde(rename = "FiatPaymentMethodCardDisplay")]
15    Card(FiatPaymentMethodCardDisplay),
16    /// Identifier display
17    #[serde(rename = "FiatPaymentMethodIdentifierDisplay")]
18    Identifier(FiatPaymentMethodIdentifierDisplay),
19}
20
21/// Bank payment method display
22#[derive(Debug, Clone, Serialize, Deserialize)]
23pub struct FiatPaymentMethodBankDisplay {
24    /// Account number
25    #[serde(rename = "AccountNumber")]
26    pub account_number: Option<String>,
27    /// Bank code
28    #[serde(rename = "BankCode")]
29    pub bank_code: Option<String>,
30}
31
32/// Card payment method display
33#[derive(Debug, Clone, Serialize, Deserialize)]
34pub struct FiatPaymentMethodCardDisplay {
35    /// Last 4 digits
36    #[serde(rename = "Last4")]
37    pub last4: String,
38    /// Card scheme
39    #[serde(rename = "Scheme")]
40    pub scheme: FiatPaymentCardScheme,
41}
42
43/// Identifier payment method display
44#[derive(Debug, Clone, Serialize, Deserialize)]
45pub struct FiatPaymentMethodIdentifierDisplay {
46    /// Identifier type
47    #[serde(rename = "IdentifierType")]
48    pub identifier_type: PaymentMethodIdentifierType,
49    /// Identifier value
50    #[serde(rename = "Identifier")]
51    pub identifier: String,
52}
53
54/// Card scheme
55#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
56#[serde(rename_all = "PascalCase")]
57pub enum FiatPaymentCardScheme {
58    /// Mastercard
59    Mastercard,
60    /// Visa
61    Visa,
62}
63
64/// Payment method identifier type
65#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
66#[serde(rename_all = "PascalCase")]
67pub enum PaymentMethodIdentifierType {
68    /// Phone number
69    PhoneNumber,
70    /// Email
71    Email,
72    /// Tax ID
73    TaxId,
74}
75
76/// Payment method display
77#[derive(Debug, Clone, Serialize, Deserialize)]
78pub struct PaymentMethodDisplay {
79    /// Payment method ID
80    #[serde(rename = "ID")]
81    pub id: PaymentMethodID,
82    /// Payment method type
83    #[serde(rename = "PaymentMethodType")]
84    pub payment_method_type: PaymentMethodType,
85    /// Display details
86    #[serde(rename = "Details")]
87    pub details: PaymentMethodDisplayDetails,
88}
89
90/// Payment method
91#[derive(Debug, Clone, Serialize, Deserialize)]
92pub struct PaymentMethod {
93    /// Payment method ID
94    #[serde(rename = "ID")]
95    pub id: PaymentMethodID,
96    /// Customer ID
97    #[serde(rename = "CustomerID")]
98    pub customer_id: Option<CustomerID>,
99    /// Country
100    #[serde(rename = "Country")]
101    pub country: CountryCode,
102    /// Payment method category
103    #[serde(rename = "PaymentMethodCategory")]
104    pub payment_method_category: PaymentMethodCategory,
105    /// Display details
106    #[serde(rename = "DisplayDetails")]
107    pub display_details: PaymentMethodDisplayDetails,
108}
109
110/// Get payment methods response
111#[derive(Debug, Clone, Serialize, Deserialize)]
112pub struct GetPaymentMethodsResponse {
113    /// List of payment methods
114    #[serde(rename = "Items")]
115    pub items: Vec<PaymentMethod>,
116    /// Pagination token
117    #[serde(rename = "PageToken")]
118    pub page_token: Option<String>,
119}