1use validator::Validate;
22
23::lazy_static::lazy_static! {
24 static ref COUNTRY_CODE_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[A-Z]{2,2}"#).unwrap();
25}
26
27::lazy_static::lazy_static! {
28 static ref ANY_BIC_IDENTIFIER_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[A-Z]{6,6}[A-Z2-9][A-NP-Z0-9]([A-Z0-9]{3,3}){0,1}"#).unwrap();
29}
30
31::lazy_static::lazy_static! {
32 static ref PHONE_NUMBER_REGEX: ::regex::Regex = ::regex::Regex::new(r#"\+[0-9]{1,3}-[0-9()+\-]{1,30}"#).unwrap();
33}
34
35pub fn namespace() -> String {
37 "urn:iso:std:iso:20022:tech:xsd:tsrv.011.001.01".to_string()
38}
39
40#[derive(
41 Debug,
42 Default,
43 Clone,
44 PartialEq,
45 ::serde::Serialize,
46 ::serde::Deserialize,
47 ::derive_builder::Builder,
48 ::validator::Validate,
49)]
50pub struct ProprietaryData3<
51 A: std::fmt::Debug + Default + Clone + PartialEq + ::serde::Serialize + ::validator::Validate,
52> {
53 #[validate]
54 #[serde(flatten)]
55 pub value: A,
56}
57#[derive(
58 Debug,
59 Default,
60 Clone,
61 PartialEq,
62 ::serde::Serialize,
63 ::serde::Deserialize,
64 ::derive_builder::Builder,
65 ::validator::Validate,
66)]
67pub struct PartyIdentification43 {
68 #[serde(rename = "Nm", skip_serializing_if = "Option::is_none")]
69 pub nm: Option<Max140Text>,
70 #[serde(rename = "PstlAdr", skip_serializing_if = "Option::is_none")]
71 pub pstl_adr: Option<PostalAddress6>,
72 #[serde(rename = "Id", skip_serializing_if = "Option::is_none")]
73 pub id: Option<Party11Choice>,
74 #[serde(rename = "CtryOfRes", skip_serializing_if = "Option::is_none")]
75 pub ctry_of_res: Option<CountryCode>,
76 #[serde(rename = "CtctDtls", skip_serializing_if = "Option::is_none")]
77 pub ctct_dtls: Option<ContactDetails2>,
78}
79#[derive(
80 Debug,
81 Default,
82 Clone,
83 PartialEq,
84 ::serde::Serialize,
85 ::serde::Deserialize,
86 ::derive_builder::Builder,
87 ::validator::Validate,
88)]
89pub struct OrganisationIdentificationSchemeName1ChoiceEnum {
90 #[serde(rename = "Prtry", skip_serializing_if = "Option::is_none")]
91 pub prtry: Option<Max35Text>,
92 #[serde(rename = "Cd", skip_serializing_if = "Option::is_none")]
93 pub cd: Option<ExternalOrganisationIdentification1Code>,
94}
95#[derive(
96 Debug,
97 Default,
98 Clone,
99 PartialEq,
100 ::serde::Serialize,
101 ::serde::Deserialize,
102 ::derive_builder::Builder,
103 ::validator::Validate,
104)]
105pub struct OrganisationIdentificationSchemeName1Choice {
106 #[serde(flatten)]
107 pub value: OrganisationIdentificationSchemeName1ChoiceEnum,
108}
109#[derive(
110 Debug,
111 Default,
112 Clone,
113 PartialEq,
114 ::serde::Serialize,
115 ::serde::Deserialize,
116 ::derive_builder::Builder,
117 ::validator::Validate,
118)]
119pub struct UndertakingNonExtensionStatusAdvice1 {
120 #[validate]
121 #[serde(rename = "NtifngPty")]
122 pub ntifng_pty: PartyIdentification43,
123 #[validate]
124 #[serde(rename = "UdrtkgId")]
125 pub udrtkg_id: Undertaking7,
126}
127#[derive(
128 Debug,
129 Default,
130 Clone,
131 PartialEq,
132 ::serde::Serialize,
133 ::serde::Deserialize,
134 ::derive_builder::Builder,
135 ::validator::Validate,
136)]
137pub struct PersonIdentificationSchemeName1ChoiceEnum {
138 #[serde(rename = "Cd", skip_serializing_if = "Option::is_none")]
139 pub cd: Option<ExternalPersonIdentification1Code>,
140 #[serde(rename = "Prtry", skip_serializing_if = "Option::is_none")]
141 pub prtry: Option<Max35Text>,
142}
143#[derive(
144 Debug,
145 Default,
146 Clone,
147 PartialEq,
148 ::serde::Serialize,
149 ::serde::Deserialize,
150 ::derive_builder::Builder,
151 ::validator::Validate,
152)]
153pub struct PersonIdentificationSchemeName1Choice {
154 #[serde(flatten)]
155 pub value: PersonIdentificationSchemeName1ChoiceEnum,
156}
157#[derive(
158 Debug,
159 Default,
160 Clone,
161 PartialEq,
162 ::serde::Serialize,
163 ::serde::Deserialize,
164 ::derive_builder::Builder,
165 ::validator::Validate,
166)]
167pub struct CountryCode {
168 #[validate(regex = "COUNTRY_CODE_REGEX")]
169 #[serde(rename = "$text")]
170 pub value: String,
171}
172#[derive(
173 Debug,
174 Default,
175 Clone,
176 PartialEq,
177 ::serde::Serialize,
178 ::serde::Deserialize,
179 ::derive_builder::Builder,
180 ::validator::Validate,
181)]
182pub struct AnyBicIdentifier {
183 #[validate(regex = "ANY_BIC_IDENTIFIER_REGEX")]
184 #[serde(rename = "$text")]
185 pub value: String,
186}
187#[derive(
188 Debug,
189 Default,
190 Clone,
191 PartialEq,
192 ::serde::Serialize,
193 ::serde::Deserialize,
194 ::derive_builder::Builder,
195 ::validator::Validate,
196)]
197pub struct Max35Text {
198 #[validate(length(min = 1, max = 35,))]
199 #[serde(rename = "$text")]
200 pub value: String,
201}
202#[derive(
203 Debug,
204 Default,
205 Clone,
206 PartialEq,
207 ::serde::Serialize,
208 ::serde::Deserialize,
209 ::derive_builder::Builder,
210 ::validator::Validate,
211)]
212pub struct PartyAndSignature2<
213 A: std::fmt::Debug + Default + Clone + PartialEq + ::serde::Serialize + ::validator::Validate,
214> {
215 #[validate]
216 #[serde(rename = "Pty")]
217 pub pty: PartyIdentification43,
218 #[validate]
219 #[serde(rename = "Sgntr")]
220 pub sgntr: ProprietaryData3<A>,
221}
222#[derive(
223 Debug,
224 Default,
225 Clone,
226 PartialEq,
227 ::serde::Serialize,
228 ::serde::Deserialize,
229 ::derive_builder::Builder,
230 ::validator::Validate,
231)]
232pub struct PersonIdentification5 {
233 #[serde(rename = "DtAndPlcOfBirth", skip_serializing_if = "Option::is_none")]
234 pub dt_and_plc_of_birth: Option<DateAndPlaceOfBirth>,
235 #[validate(length(min = 0,))]
236 #[serde(rename = "Othr", default)]
237 pub othr: Vec<GenericPersonIdentification1>,
238}
239#[derive(
240 Debug,
241 Default,
242 Clone,
243 PartialEq,
244 ::serde::Serialize,
245 ::serde::Deserialize,
246 ::derive_builder::Builder,
247 ::validator::Validate,
248)]
249pub struct ExternalOrganisationIdentification1Code {
250 #[validate(length(min = 1, max = 4,))]
251 #[serde(rename = "$text")]
252 pub value: String,
253}
254#[derive(
255 Debug,
256 Default,
257 Clone,
258 PartialEq,
259 ::serde::Serialize,
260 ::serde::Deserialize,
261 ::derive_builder::Builder,
262 ::validator::Validate,
263)]
264pub struct Max70Text {
265 #[validate(length(min = 1, max = 70,))]
266 #[serde(rename = "$text")]
267 pub value: String,
268}
269#[derive(
270 Debug,
271 Default,
272 Clone,
273 PartialEq,
274 ::serde::Serialize,
275 ::serde::Deserialize,
276 ::derive_builder::Builder,
277 ::validator::Validate,
278)]
279pub struct Max2048Text {
280 #[validate(length(min = 1, max = 2048,))]
281 #[serde(rename = "$text")]
282 pub value: String,
283}
284#[derive(
285 Debug,
286 Default,
287 Clone,
288 PartialEq,
289 ::serde::Serialize,
290 ::serde::Deserialize,
291 ::derive_builder::Builder,
292 ::validator::Validate,
293)]
294#[serde(rename = "Document")]
295pub struct Document<
296 A: std::fmt::Debug + Default + Clone + PartialEq + ::serde::Serialize + ::validator::Validate,
297> {
298 #[validate]
299 #[serde(rename = "UdrtkgNonXtnsnNtfctn")]
300 pub udrtkg_non_xtnsn_ntfctn: UndertakingNonExtensionNotificationV01<A>,
301 #[serde(rename = "@xmlns", default = "namespace")]
302 pub xmlns: String,
303}
304#[derive(
305 Debug,
306 Default,
307 Clone,
308 PartialEq,
309 ::serde::Serialize,
310 ::serde::Deserialize,
311 ::derive_builder::Builder,
312 ::validator::Validate,
313)]
314pub struct IsoDate {
315 #[serde(rename = "$text")]
316 pub value: ::chrono::NaiveDate,
317}
318#[derive(
319 Debug,
320 Default,
321 Clone,
322 PartialEq,
323 ::serde::Serialize,
324 ::serde::Deserialize,
325 ::derive_builder::Builder,
326 ::validator::Validate,
327)]
328pub struct OrganisationIdentification8 {
329 #[serde(rename = "AnyBIC", skip_serializing_if = "Option::is_none")]
330 pub any_bic: Option<AnyBicIdentifier>,
331 #[validate(length(min = 0,))]
332 #[serde(rename = "Othr", default)]
333 pub othr: Vec<GenericOrganisationIdentification1>,
334}
335#[derive(
336 Debug,
337 Default,
338 Clone,
339 PartialEq,
340 ::serde::Serialize,
341 ::serde::Deserialize,
342 ::derive_builder::Builder,
343 ::validator::Validate,
344)]
345pub struct UndertakingNonExtensionNotificationV01<
346 A: std::fmt::Debug + Default + Clone + PartialEq + ::serde::Serialize + ::validator::Validate,
347> {
348 #[serde(rename = "UdrtkgNonXtnsnNtfctnDtls")]
349 pub udrtkg_non_xtnsn_ntfctn_dtls: UndertakingNonExtensionStatusAdvice1,
350 #[serde(rename = "DgtlSgntr", skip_serializing_if = "Option::is_none")]
351 pub dgtl_sgntr: Option<PartyAndSignature2<A>>,
352}
353#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
354pub enum AddressType2Code {
355 #[serde(rename = "ADDR")]
356 Addr,
357 #[serde(rename = "PBOX")]
358 Pbox,
359 #[serde(rename = "HOME")]
360 Home,
361 #[serde(rename = "BIZZ")]
362 Bizz,
363 #[serde(rename = "MLTO")]
364 Mlto,
365 #[serde(rename = "DLVY")]
366 Dlvy,
367 #[default]
368 Unknown,
369}
370#[derive(
371 Debug,
372 Default,
373 Clone,
374 PartialEq,
375 ::serde::Serialize,
376 ::serde::Deserialize,
377 ::derive_builder::Builder,
378 ::validator::Validate,
379)]
380pub struct Party11ChoiceEnum {
381 #[serde(rename = "OrgId", skip_serializing_if = "Option::is_none")]
382 pub org_id: Option<OrganisationIdentification8>,
383 #[serde(rename = "PrvtId", skip_serializing_if = "Option::is_none")]
384 pub prvt_id: Option<PersonIdentification5>,
385}
386#[derive(
387 Debug,
388 Default,
389 Clone,
390 PartialEq,
391 ::serde::Serialize,
392 ::serde::Deserialize,
393 ::derive_builder::Builder,
394 ::validator::Validate,
395)]
396pub struct Party11Choice {
397 #[serde(flatten)]
398 pub value: Party11ChoiceEnum,
399}
400#[derive(
401 Debug,
402 Default,
403 Clone,
404 PartialEq,
405 ::serde::Serialize,
406 ::serde::Deserialize,
407 ::derive_builder::Builder,
408 ::validator::Validate,
409)]
410pub struct ContactDetails2 {
411 #[serde(rename = "NmPrfx", skip_serializing_if = "Option::is_none")]
412 pub nm_prfx: Option<NamePrefix1Code>,
413 #[serde(rename = "Nm", skip_serializing_if = "Option::is_none")]
414 pub nm: Option<Max140Text>,
415 #[serde(rename = "PhneNb", skip_serializing_if = "Option::is_none")]
416 pub phne_nb: Option<PhoneNumber>,
417 #[serde(rename = "MobNb", skip_serializing_if = "Option::is_none")]
418 pub mob_nb: Option<PhoneNumber>,
419 #[serde(rename = "FaxNb", skip_serializing_if = "Option::is_none")]
420 pub fax_nb: Option<PhoneNumber>,
421 #[serde(rename = "EmailAdr", skip_serializing_if = "Option::is_none")]
422 pub email_adr: Option<Max2048Text>,
423 #[serde(rename = "Othr", skip_serializing_if = "Option::is_none")]
424 pub othr: Option<Max35Text>,
425}
426#[derive(
427 Debug,
428 Default,
429 Clone,
430 PartialEq,
431 ::serde::Serialize,
432 ::serde::Deserialize,
433 ::derive_builder::Builder,
434 ::validator::Validate,
435)]
436pub struct GenericPersonIdentification1 {
437 #[validate]
438 #[serde(rename = "Id")]
439 pub id: Max35Text,
440 #[serde(rename = "SchmeNm", skip_serializing_if = "Option::is_none")]
441 pub schme_nm: Option<PersonIdentificationSchemeName1Choice>,
442 #[serde(rename = "Issr", skip_serializing_if = "Option::is_none")]
443 pub issr: Option<Max35Text>,
444}
445#[derive(
446 Debug,
447 Default,
448 Clone,
449 PartialEq,
450 ::serde::Serialize,
451 ::serde::Deserialize,
452 ::derive_builder::Builder,
453 ::validator::Validate,
454)]
455pub struct PhoneNumber {
456 #[validate(regex = "PHONE_NUMBER_REGEX")]
457 #[serde(rename = "$text")]
458 pub value: String,
459}
460#[derive(
461 Debug,
462 Default,
463 Clone,
464 PartialEq,
465 ::serde::Serialize,
466 ::serde::Deserialize,
467 ::derive_builder::Builder,
468 ::validator::Validate,
469)]
470pub struct DateAndPlaceOfBirth {
471 #[validate]
472 #[serde(rename = "BirthDt")]
473 pub birth_dt: IsoDate,
474 #[serde(rename = "PrvcOfBirth", skip_serializing_if = "Option::is_none")]
475 pub prvc_of_birth: Option<Max35Text>,
476 #[validate]
477 #[serde(rename = "CityOfBirth")]
478 pub city_of_birth: Max35Text,
479 #[serde(rename = "CtryOfBirth")]
480 pub ctry_of_birth: CountryCode,
481}
482#[derive(
483 Debug,
484 Default,
485 Clone,
486 PartialEq,
487 ::serde::Serialize,
488 ::serde::Deserialize,
489 ::derive_builder::Builder,
490 ::validator::Validate,
491)]
492pub struct Max140Text {
493 #[validate(length(min = 1, max = 140,))]
494 #[serde(rename = "$text")]
495 pub value: String,
496}
497#[derive(
498 Debug,
499 Default,
500 Clone,
501 PartialEq,
502 ::serde::Serialize,
503 ::serde::Deserialize,
504 ::derive_builder::Builder,
505 ::validator::Validate,
506)]
507pub struct PostalAddress6 {
508 #[serde(rename = "AdrTp", skip_serializing_if = "Option::is_none")]
509 pub adr_tp: Option<AddressType2Code>,
510 #[serde(rename = "Dept", skip_serializing_if = "Option::is_none")]
511 pub dept: Option<Max70Text>,
512 #[serde(rename = "SubDept", skip_serializing_if = "Option::is_none")]
513 pub sub_dept: Option<Max70Text>,
514 #[serde(rename = "StrtNm", skip_serializing_if = "Option::is_none")]
515 pub strt_nm: Option<Max70Text>,
516 #[serde(rename = "BldgNb", skip_serializing_if = "Option::is_none")]
517 pub bldg_nb: Option<Max16Text>,
518 #[serde(rename = "PstCd", skip_serializing_if = "Option::is_none")]
519 pub pst_cd: Option<Max16Text>,
520 #[serde(rename = "TwnNm", skip_serializing_if = "Option::is_none")]
521 pub twn_nm: Option<Max35Text>,
522 #[serde(rename = "CtrySubDvsn", skip_serializing_if = "Option::is_none")]
523 pub ctry_sub_dvsn: Option<Max35Text>,
524 #[serde(rename = "Ctry", skip_serializing_if = "Option::is_none")]
525 pub ctry: Option<CountryCode>,
526 #[validate(length(min = 0, max = 7,))]
527 #[serde(rename = "AdrLine", default)]
528 pub adr_line: Vec<Max70Text>,
529}
530#[derive(
531 Debug,
532 Default,
533 Clone,
534 PartialEq,
535 ::serde::Serialize,
536 ::serde::Deserialize,
537 ::derive_builder::Builder,
538 ::validator::Validate,
539)]
540pub struct ExternalPersonIdentification1Code {
541 #[validate(length(min = 1, max = 4,))]
542 #[serde(rename = "$text")]
543 pub value: String,
544}
545#[derive(
546 Debug,
547 Default,
548 Clone,
549 PartialEq,
550 ::serde::Serialize,
551 ::serde::Deserialize,
552 ::derive_builder::Builder,
553 ::validator::Validate,
554)]
555pub struct GenericOrganisationIdentification1 {
556 #[validate]
557 #[serde(rename = "Id")]
558 pub id: Max35Text,
559 #[serde(rename = "SchmeNm", skip_serializing_if = "Option::is_none")]
560 pub schme_nm: Option<OrganisationIdentificationSchemeName1Choice>,
561 #[serde(rename = "Issr", skip_serializing_if = "Option::is_none")]
562 pub issr: Option<Max35Text>,
563}
564#[derive(
565 Debug,
566 Default,
567 Clone,
568 PartialEq,
569 ::serde::Serialize,
570 ::serde::Deserialize,
571 ::derive_builder::Builder,
572 ::validator::Validate,
573)]
574pub struct Undertaking7 {
575 #[validate]
576 #[serde(rename = "Id")]
577 pub id: Max35Text,
578 #[validate]
579 #[serde(rename = "Issr")]
580 pub issr: PartyIdentification43,
581}
582#[derive(
583 Debug,
584 Default,
585 Clone,
586 PartialEq,
587 ::serde::Serialize,
588 ::serde::Deserialize,
589 ::derive_builder::Builder,
590 ::validator::Validate,
591)]
592pub struct Max16Text {
593 #[validate(length(min = 1, max = 16,))]
594 #[serde(rename = "$text")]
595 pub value: String,
596}
597#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
598pub enum NamePrefix1Code {
599 #[serde(rename = "DOCT")]
600 Doct,
601 #[serde(rename = "MIST")]
602 Mist,
603 #[serde(rename = "MISS")]
604 Miss,
605 #[serde(rename = "MADM")]
606 Madm,
607 #[default]
608 Unknown,
609}