noah_sdk/models/
customers.rs

1//! Customer-related models
2
3use crate::models::common::*;
4use serde::{Deserialize, Serialize};
5
6/// Full name
7#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct FullName {
9    /// First name
10    #[serde(rename = "FirstName")]
11    pub first_name: String,
12    /// Last name
13    #[serde(rename = "LastName")]
14    pub last_name: String,
15    /// Middle name (optional)
16    #[serde(rename = "MiddleName")]
17    pub middle_name: Option<String>,
18}
19
20/// Street address
21#[derive(Debug, Clone, Serialize, Deserialize)]
22pub struct StreetAddress {
23    /// Street
24    #[serde(rename = "Street")]
25    pub street: String,
26    /// Street 2 (optional)
27    #[serde(rename = "Street2")]
28    pub street2: Option<String>,
29    /// City
30    #[serde(rename = "City")]
31    pub city: String,
32    /// Post code
33    #[serde(rename = "PostCode")]
34    pub post_code: String,
35    /// State
36    #[serde(rename = "State")]
37    pub state: String,
38    /// Country
39    #[serde(rename = "Country")]
40    pub country: CountryCode,
41}
42
43/// ID type
44#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
45#[serde(rename_all = "PascalCase")]
46pub enum IDType {
47    /// Driving license
48    DrivingLicense,
49    /// National ID card
50    NationalIdCard,
51    /// Passport
52    Passport,
53    /// Address proof
54    AddressProof,
55    /// Residence permit
56    ResidencePermit,
57    /// Tax ID
58    TaxId,
59}
60
61/// Customer identity
62#[derive(Debug, Clone, Serialize, Deserialize)]
63pub struct CustomerIdentity {
64    /// Issuing country
65    #[serde(rename = "IssuingCountry")]
66    pub issuing_country: CountryCode,
67    /// ID number
68    #[serde(rename = "IDNumber")]
69    pub id_number: String,
70    /// Issued date (optional)
71    #[serde(rename = "IssuedDate")]
72    pub issued_date: Option<Date>,
73    /// Expiry date (optional)
74    #[serde(rename = "ExpiryDate")]
75    pub expiry_date: Option<Date>,
76    /// ID type
77    #[serde(rename = "IDType")]
78    pub id_type: IDType,
79}
80
81/// Verification status
82#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
83#[serde(rename_all = "PascalCase")]
84pub enum VerificationStatus {
85    /// Approved
86    Approved,
87    /// Pending
88    Pending,
89    /// Declined
90    Declined,
91}
92
93/// Verification (deprecated)
94#[derive(Debug, Clone, Serialize, Deserialize)]
95pub struct Verification {
96    /// Model
97    #[serde(rename = "Model")]
98    pub model: String,
99    /// Status
100    #[serde(rename = "Status")]
101    pub status: VerificationStatus,
102}
103
104/// Verifications
105#[derive(Debug, Clone, Serialize, Deserialize)]
106pub struct Verifications {
107    /// Type
108    #[serde(rename = "Type")]
109    pub verification_type: String,
110    /// Status
111    #[serde(rename = "Status")]
112    pub status: String,
113    /// Entity verifications
114    #[serde(rename = "EntityVerifications")]
115    pub entity_verifications: Vec<serde_json::Value>,
116}
117
118/// Customer (discriminated union)
119#[derive(Debug, Clone, Serialize, Deserialize)]
120#[serde(tag = "Type")]
121pub enum Customer {
122    /// Individual customer
123    #[serde(rename = "Individual")]
124    Individual(IndividualCustomer),
125    /// Business customer
126    #[serde(rename = "Business")]
127    Business(BusinessCustomer),
128}
129
130/// Individual customer
131#[derive(Debug, Clone, Serialize, Deserialize)]
132pub struct IndividualCustomer {
133    /// Type
134    #[serde(rename = "Type")]
135    pub customer_type: String,
136    /// Customer ID
137    #[serde(rename = "CustomerID")]
138    pub customer_id: CustomerID,
139    /// Created timestamp
140    #[serde(rename = "Created")]
141    pub created: DateTime,
142    /// Date of birth
143    #[serde(rename = "DateOfBirth")]
144    pub date_of_birth: Date,
145    /// Full name
146    #[serde(rename = "FullName")]
147    pub full_name: FullName,
148    /// Identities
149    #[serde(rename = "Identities")]
150    pub identities: Vec<CustomerIdentity>,
151    /// Primary residence
152    #[serde(rename = "PrimaryResidence")]
153    pub primary_residence: StreetAddress,
154    /// Verification (deprecated)
155    #[serde(rename = "Verification")]
156    pub verification: Verification,
157    /// Verifications
158    #[serde(rename = "Verifications")]
159    pub verifications: Option<Verifications>,
160    /// Metadata
161    #[serde(rename = "Metadata")]
162    pub metadata: Option<std::collections::HashMap<String, String>>,
163}
164
165/// Business customer
166#[derive(Debug, Clone, Serialize, Deserialize)]
167pub struct BusinessCustomer {
168    /// Type
169    #[serde(rename = "Type")]
170    pub customer_type: String,
171    /// Customer ID
172    #[serde(rename = "CustomerID")]
173    pub customer_id: CustomerID,
174    /// Created timestamp
175    #[serde(rename = "Created")]
176    pub created: DateTime,
177    /// Registered name
178    #[serde(rename = "RegisteredName")]
179    pub registered_name: String,
180    /// Email (optional)
181    #[serde(rename = "Email")]
182    pub email: Option<String>,
183    /// Registration number (optional)
184    #[serde(rename = "RegistrationNumber")]
185    pub registration_number: Option<String>,
186    /// Registration country (optional)
187    #[serde(rename = "RegistrationCountry")]
188    pub registration_country: Option<CountryCode>,
189    /// Registered address (optional)
190    #[serde(rename = "RegisteredAddress")]
191    pub registered_address: Option<StreetAddress>,
192    /// Incorporation date (optional)
193    #[serde(rename = "IncorporationDate")]
194    pub incorporation_date: Option<Date>,
195    /// Verification (deprecated)
196    #[serde(rename = "Verification")]
197    pub verification: Verification,
198    /// Verifications
199    #[serde(rename = "Verifications")]
200    pub verifications: Option<Verifications>,
201    /// Metadata
202    #[serde(rename = "Metadata")]
203    pub metadata: Option<std::collections::HashMap<String, String>>,
204}
205
206/// Individual customer input
207#[derive(Debug, Clone, Serialize, Deserialize)]
208pub struct IndividualCustomerInput {
209    /// Type
210    #[serde(rename = "Type")]
211    pub customer_type: String,
212    /// Full name
213    #[serde(rename = "FullName")]
214    pub full_name: FullName,
215    /// Date of birth
216    #[serde(rename = "DateOfBirth")]
217    pub date_of_birth: Date,
218    /// Email (optional)
219    #[serde(rename = "Email")]
220    pub email: Option<String>,
221    /// Phone number (optional)
222    #[serde(rename = "PhoneNumber")]
223    pub phone_number: Option<PhoneNumber>,
224    /// Identities
225    #[serde(rename = "Identities")]
226    pub identities: Vec<CustomerIdentity>,
227    /// Primary residence
228    #[serde(rename = "PrimaryResidence")]
229    pub primary_residence: StreetAddress,
230}
231
232/// Business customer input
233#[derive(Debug, Clone, Serialize, Deserialize)]
234pub struct BusinessCustomerInput {
235    /// Type
236    #[serde(rename = "Type")]
237    pub customer_type: String,
238    /// Registered name
239    #[serde(rename = "RegisteredName")]
240    pub registered_name: String,
241    /// Email (optional)
242    #[serde(rename = "Email")]
243    pub email: Option<String>,
244    /// Registration number
245    #[serde(rename = "RegistrationNumber")]
246    pub registration_number: String,
247    /// Registration country
248    #[serde(rename = "RegistrationCountry")]
249    pub registration_country: CountryCode,
250    /// Registered address
251    #[serde(rename = "RegisteredAddress")]
252    pub registered_address: StreetAddress,
253    /// Incorporation date
254    #[serde(rename = "IncorporationDate")]
255    pub incorporation_date: Date,
256}
257
258/// Customer input (discriminated union)
259#[derive(Debug, Clone, Serialize, Deserialize)]
260#[serde(tag = "Type")]
261pub enum CustomerInput {
262    /// Individual customer input
263    #[serde(rename = "Individual")]
264    Individual(IndividualCustomerInput),
265    /// Business customer input
266    #[serde(rename = "Business")]
267    Business(BusinessCustomerInput),
268}
269
270/// Get customers response
271#[derive(Debug, Clone, Serialize, Deserialize)]
272pub struct GetCustomersResponse {
273    /// List of customers
274    #[serde(rename = "Items")]
275    pub items: Vec<Customer>,
276    /// Pagination token
277    #[serde(rename = "PageToken")]
278    pub page_token: Option<String>,
279}