1use crate::models::common::*;
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct FullName {
9 #[serde(rename = "FirstName")]
11 pub first_name: String,
12 #[serde(rename = "LastName")]
14 pub last_name: String,
15 #[serde(rename = "MiddleName")]
17 pub middle_name: Option<String>,
18}
19
20#[derive(Debug, Clone, Serialize, Deserialize)]
22pub struct StreetAddress {
23 #[serde(rename = "Street")]
25 pub street: String,
26 #[serde(rename = "Street2")]
28 pub street2: Option<String>,
29 #[serde(rename = "City")]
31 pub city: String,
32 #[serde(rename = "PostCode")]
34 pub post_code: String,
35 #[serde(rename = "State")]
37 pub state: String,
38 #[serde(rename = "Country")]
40 pub country: CountryCode,
41}
42
43#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
45#[serde(rename_all = "PascalCase")]
46pub enum IDType {
47 DrivingLicense,
49 NationalIdCard,
51 Passport,
53 AddressProof,
55 ResidencePermit,
57 TaxId,
59}
60
61#[derive(Debug, Clone, Serialize, Deserialize)]
63pub struct CustomerIdentity {
64 #[serde(rename = "IssuingCountry")]
66 pub issuing_country: CountryCode,
67 #[serde(rename = "IDNumber")]
69 pub id_number: String,
70 #[serde(rename = "IssuedDate")]
72 pub issued_date: Option<Date>,
73 #[serde(rename = "ExpiryDate")]
75 pub expiry_date: Option<Date>,
76 #[serde(rename = "IDType")]
78 pub id_type: IDType,
79}
80
81#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
83#[serde(rename_all = "PascalCase")]
84pub enum VerificationStatus {
85 Approved,
87 Pending,
89 Declined,
91}
92
93#[derive(Debug, Clone, Serialize, Deserialize)]
95pub struct Verification {
96 #[serde(rename = "Model")]
98 pub model: String,
99 #[serde(rename = "Status")]
101 pub status: VerificationStatus,
102}
103
104#[derive(Debug, Clone, Serialize, Deserialize)]
106pub struct Verifications {
107 #[serde(rename = "Type")]
109 pub verification_type: String,
110 #[serde(rename = "Status")]
112 pub status: String,
113 #[serde(rename = "EntityVerifications")]
115 pub entity_verifications: Vec<serde_json::Value>,
116}
117
118#[derive(Debug, Clone, Serialize, Deserialize)]
120#[serde(tag = "Type")]
121pub enum Customer {
122 #[serde(rename = "Individual")]
124 Individual(IndividualCustomer),
125 #[serde(rename = "Business")]
127 Business(BusinessCustomer),
128}
129
130#[derive(Debug, Clone, Serialize, Deserialize)]
132pub struct IndividualCustomer {
133 #[serde(rename = "Type")]
135 pub customer_type: String,
136 #[serde(rename = "CustomerID")]
138 pub customer_id: CustomerID,
139 #[serde(rename = "Created")]
141 pub created: DateTime,
142 #[serde(rename = "DateOfBirth")]
144 pub date_of_birth: Date,
145 #[serde(rename = "FullName")]
147 pub full_name: FullName,
148 #[serde(rename = "Identities")]
150 pub identities: Vec<CustomerIdentity>,
151 #[serde(rename = "PrimaryResidence")]
153 pub primary_residence: StreetAddress,
154 #[serde(rename = "Verification")]
156 pub verification: Verification,
157 #[serde(rename = "Verifications")]
159 pub verifications: Option<Verifications>,
160 #[serde(rename = "Metadata")]
162 pub metadata: Option<std::collections::HashMap<String, String>>,
163}
164
165#[derive(Debug, Clone, Serialize, Deserialize)]
167pub struct BusinessCustomer {
168 #[serde(rename = "Type")]
170 pub customer_type: String,
171 #[serde(rename = "CustomerID")]
173 pub customer_id: CustomerID,
174 #[serde(rename = "Created")]
176 pub created: DateTime,
177 #[serde(rename = "RegisteredName")]
179 pub registered_name: String,
180 #[serde(rename = "Email")]
182 pub email: Option<String>,
183 #[serde(rename = "RegistrationNumber")]
185 pub registration_number: Option<String>,
186 #[serde(rename = "RegistrationCountry")]
188 pub registration_country: Option<CountryCode>,
189 #[serde(rename = "RegisteredAddress")]
191 pub registered_address: Option<StreetAddress>,
192 #[serde(rename = "IncorporationDate")]
194 pub incorporation_date: Option<Date>,
195 #[serde(rename = "Verification")]
197 pub verification: Verification,
198 #[serde(rename = "Verifications")]
200 pub verifications: Option<Verifications>,
201 #[serde(rename = "Metadata")]
203 pub metadata: Option<std::collections::HashMap<String, String>>,
204}
205
206#[derive(Debug, Clone, Serialize, Deserialize)]
208pub struct IndividualCustomerInput {
209 #[serde(rename = "Type")]
211 pub customer_type: String,
212 #[serde(rename = "FullName")]
214 pub full_name: FullName,
215 #[serde(rename = "DateOfBirth")]
217 pub date_of_birth: Date,
218 #[serde(rename = "Email")]
220 pub email: Option<String>,
221 #[serde(rename = "PhoneNumber")]
223 pub phone_number: Option<PhoneNumber>,
224 #[serde(rename = "Identities")]
226 pub identities: Vec<CustomerIdentity>,
227 #[serde(rename = "PrimaryResidence")]
229 pub primary_residence: StreetAddress,
230}
231
232#[derive(Debug, Clone, Serialize, Deserialize)]
234pub struct BusinessCustomerInput {
235 #[serde(rename = "Type")]
237 pub customer_type: String,
238 #[serde(rename = "RegisteredName")]
240 pub registered_name: String,
241 #[serde(rename = "Email")]
243 pub email: Option<String>,
244 #[serde(rename = "RegistrationNumber")]
246 pub registration_number: String,
247 #[serde(rename = "RegistrationCountry")]
249 pub registration_country: CountryCode,
250 #[serde(rename = "RegisteredAddress")]
252 pub registered_address: StreetAddress,
253 #[serde(rename = "IncorporationDate")]
255 pub incorporation_date: Date,
256}
257
258#[derive(Debug, Clone, Serialize, Deserialize)]
260#[serde(tag = "Type")]
261pub enum CustomerInput {
262 #[serde(rename = "Individual")]
264 Individual(IndividualCustomerInput),
265 #[serde(rename = "Business")]
267 Business(BusinessCustomerInput),
268}
269
270#[derive(Debug, Clone, Serialize, Deserialize)]
272pub struct GetCustomersResponse {
273 #[serde(rename = "Items")]
275 pub items: Vec<Customer>,
276 #[serde(rename = "PageToken")]
278 pub page_token: Option<String>,
279}