1use serde::{Deserialize, Serialize};
6
7use crate::{BankAccountNumber, ConnectionId, space_separated_strings_as_vec};
8
9#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
11#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
12pub enum IdentityStatus {
13 Processing,
15 Complete,
17 Error,
19}
20
21#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
23pub struct Identity {
24 pub name: String,
26
27 pub formatted_account: BankAccountNumber,
29
30 #[serde(default, skip_serializing_if = "Option::is_none")]
32 pub meta: Option<serde_json::Value>,
33}
34
35#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
37pub struct Address {
38 #[serde(rename = "type")]
40 pub kind: AddressKind,
41
42 pub value: String,
44
45 #[serde(default, skip_serializing_if = "Option::is_none")]
47 pub formatted_address: Option<String>,
48
49 #[serde(default, skip_serializing_if = "Option::is_none")]
51 pub place_id: Option<String>,
52
53 #[serde(default, skip_serializing_if = "Option::is_none")]
55 pub components: Option<AddressComponents>,
56}
57
58#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
60#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
61pub enum AddressKind {
62 Residential,
64 Postal,
66 Unknown,
68}
69
70#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
72pub struct AddressComponents {
73 #[serde(default, skip_serializing_if = "Option::is_none")]
75 pub street: Option<String>,
76
77 #[serde(default, skip_serializing_if = "Option::is_none")]
79 pub suburb: Option<String>,
80
81 #[serde(default, skip_serializing_if = "Option::is_none")]
83 pub city: Option<String>,
84
85 #[serde(default, skip_serializing_if = "Option::is_none")]
87 pub region: Option<String>,
88
89 #[serde(default, skip_serializing_if = "Option::is_none")]
91 pub postal_code: Option<String>,
92
93 #[serde(default, skip_serializing_if = "Option::is_none")]
95 pub country: Option<String>,
96}
97
98#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
100pub struct IdentityAccount {
101 pub name: String,
103
104 pub account_number: BankAccountNumber,
106
107 pub holder: String,
109
110 pub has_unlisted_holders: bool,
112
113 #[serde(default, skip_serializing_if = "Option::is_none")]
115 pub address: Option<String>,
116
117 pub bank: String,
119
120 #[serde(default, skip_serializing_if = "Option::is_none")]
122 pub branch: Option<BranchInfo>,
123}
124
125#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
127pub struct BranchInfo {
128 #[serde(rename = "_id")]
130 pub id: String,
131
132 pub description: String,
134
135 #[serde(default, skip_serializing_if = "Option::is_none")]
137 pub phone: Option<String>,
138
139 #[serde(default, skip_serializing_if = "Option::is_none")]
141 pub address: Option<String>,
142}
143
144#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
146pub struct IdentitySource {
147 #[serde(rename = "_id")]
149 pub id: ConnectionId,
150}
151
152#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
154pub struct IdentityProfile {
155 #[serde(rename = "_id")]
157 pub id: String,
158}
159
160#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
162pub struct VerifyNameRequest {
163 pub family_name: String,
165
166 #[serde(default, skip_serializing_if = "Option::is_none")]
168 pub given_name: Option<String>,
169
170 #[serde(
173 rename = "middle_name",
174 default,
175 skip_serializing_if = "Option::is_none",
176 with = "space_separated_strings_as_vec"
177 )]
178 pub middle_names: Option<Vec<String>>,
179}
180
181#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
183pub struct VerifyNameResponse {
184 pub success: bool,
186
187 pub item: VerifyNameItem,
189}
190
191#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
193pub struct VerifyNameItem {
194 pub sources: Vec<VerificationSource>,
196
197 pub name: VerifyNameRequest,
199}
200
201#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
203pub struct VerificationSource {
204 #[serde(rename = "type")]
206 pub source_type: VerificationSourceType,
207
208 pub meta: serde_json::Value,
210
211 #[serde(default, skip_serializing_if = "Option::is_none")]
213 pub match_result: Option<MatchResult>,
214
215 #[serde(default, skip_serializing_if = "Option::is_none")]
217 pub verification: Option<NameVerification>,
218}
219
220#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
222#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
223pub enum VerificationSourceType {
224 HolderName,
226 PartyName,
228}
229
230#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
232#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
233pub enum MatchResult {
234 Match,
236 PartialMatch,
238}
239
240#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
242pub struct NameVerification {
243 #[serde(default, skip_serializing_if = "Option::is_none")]
245 pub family_name: Option<bool>,
246
247 #[serde(default, skip_serializing_if = "Option::is_none")]
249 pub given_name: Option<bool>,
250
251 #[serde(default, skip_serializing_if = "Option::is_none")]
253 pub middle_name: Option<bool>,
254
255 #[serde(default, skip_serializing_if = "Option::is_none")]
257 pub middle_initial: Option<bool>,
258
259 #[serde(default, skip_serializing_if = "Option::is_none")]
261 pub given_initial: Option<bool>,
262}
263
264#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
269pub struct Party {
270 #[serde(rename = "_id")]
272 pub id: String,
273
274 pub name: String,
276
277 #[serde(default, skip_serializing_if = "Option::is_none")]
279 pub email: Option<String>,
280
281 #[serde(default, skip_serializing_if = "Option::is_none")]
283 pub phone: Option<String>,
284
285 #[serde(default, skip_serializing_if = "Option::is_none")]
287 pub addresses: Option<Vec<Address>>,
288
289 #[serde(default, skip_serializing_if = "Option::is_none")]
291 pub tax_number: Option<String>,
292
293 #[serde(default, skip_serializing_if = "Option::is_none")]
295 pub meta: Option<serde_json::Value>,
296}