use crate::parse_result::{ErrorCollector, ParserConfig};
use crate::validation::{Validate, helpers};
use serde::{Deserialize, Serialize};
#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq)]
pub struct BranchAndFinancialInstitutionIdentification62 {
#[serde(rename = "FinInstnId")]
pub fin_instn_id: FinancialInstitutionIdentification182,
}
impl Validate for BranchAndFinancialInstitutionIdentification62 {
fn validate(&self, path: &str, config: &ParserConfig, collector: &mut ErrorCollector) {
self.fin_instn_id
.validate(&helpers::child_path(path, "FinInstnId"), config, collector);
}
}
#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq)]
pub struct BusinessApplicationHeader51 {
#[serde(rename = "CharSet", skip_serializing_if = "Option::is_none")]
pub char_set: Option<String>,
#[serde(rename = "Fr")]
pub fr: Party44Choice1,
#[serde(rename = "To")]
pub to: Party44Choice1,
#[serde(rename = "BizMsgIdr")]
pub biz_msg_idr: String,
#[serde(rename = "MsgDefIdr")]
pub msg_def_idr: String,
#[serde(rename = "BizSvc", skip_serializing_if = "Option::is_none")]
pub biz_svc: Option<String>,
#[serde(rename = "CreDt")]
pub cre_dt: String,
#[serde(rename = "CpyDplct", skip_serializing_if = "Option::is_none")]
pub cpy_dplct: Option<CopyDuplicate1Code>,
#[serde(rename = "Prty", skip_serializing_if = "Option::is_none")]
pub prty: Option<String>,
}
impl Validate for BusinessApplicationHeader51 {
fn validate(&self, path: &str, config: &ParserConfig, collector: &mut ErrorCollector) {
self.fr
.validate(&helpers::child_path(path, "Fr"), config, collector);
self.to
.validate(&helpers::child_path(path, "To"), config, collector);
helpers::validate_length(
&self.biz_msg_idr,
"BizMsgIdr",
Some(1),
Some(35),
&helpers::child_path(path, "BizMsgIdr"),
config,
collector,
);
helpers::validate_length(
&self.msg_def_idr,
"MsgDefIdr",
Some(1),
Some(35),
&helpers::child_path(path, "MsgDefIdr"),
config,
collector,
);
if let Some(ref val) = self.biz_svc {
helpers::validate_length(
val,
"BizSvc",
Some(1),
Some(35),
&helpers::child_path(path, "BizSvc"),
config,
collector,
);
}
helpers::validate_pattern(
&self.cre_dt,
"CreDt",
".*(\\+|-)((0[0-9])|(1[0-4])):[0-5][0-9]",
&helpers::child_path(path, "CreDt"),
config,
collector,
);
if let Some(ref val) = self.cpy_dplct
&& config.validate_optional_fields
{
val.validate(&helpers::child_path(path, "CpyDplct"), config, collector);
}
}
}
#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq)]
#[serde(rename = "AppHdr")]
pub struct BusinessApplicationHeaderV02 {
#[serde(rename = "CharSet", skip_serializing_if = "Option::is_none")]
pub char_set: Option<String>,
#[serde(rename = "Fr")]
pub fr: Party44Choice1,
#[serde(rename = "To")]
pub to: Party44Choice1,
#[serde(rename = "BizMsgIdr")]
pub biz_msg_idr: String,
#[serde(rename = "MsgDefIdr")]
pub msg_def_idr: String,
#[serde(rename = "BizSvc")]
pub biz_svc: String,
#[serde(rename = "MktPrctc", skip_serializing_if = "Option::is_none")]
pub mkt_prctc: Option<ImplementationSpecification1>,
#[serde(rename = "CreDt")]
pub cre_dt: String,
#[serde(rename = "CpyDplct", skip_serializing_if = "Option::is_none")]
pub cpy_dplct: Option<CopyDuplicate1Code>,
#[serde(rename = "PssblDplct", skip_serializing_if = "Option::is_none")]
pub pssbl_dplct: Option<bool>,
#[serde(rename = "Prty", skip_serializing_if = "Option::is_none")]
pub prty: Option<Priority2Code>,
#[serde(rename = "Rltd", skip_serializing_if = "Option::is_none")]
pub rltd: Option<BusinessApplicationHeader51>,
}
impl Validate for BusinessApplicationHeaderV02 {
fn validate(&self, path: &str, config: &ParserConfig, collector: &mut ErrorCollector) {
self.fr
.validate(&helpers::child_path(path, "Fr"), config, collector);
self.to
.validate(&helpers::child_path(path, "To"), config, collector);
helpers::validate_length(
&self.biz_msg_idr,
"BizMsgIdr",
Some(1),
Some(35),
&helpers::child_path(path, "BizMsgIdr"),
config,
collector,
);
helpers::validate_length(
&self.msg_def_idr,
"MsgDefIdr",
Some(1),
Some(35),
&helpers::child_path(path, "MsgDefIdr"),
config,
collector,
);
helpers::validate_length(
&self.biz_svc,
"BizSvc",
Some(6),
Some(35),
&helpers::child_path(path, "BizSvc"),
config,
collector,
);
helpers::validate_pattern(
&self.biz_svc,
"BizSvc",
"[a-z0-9]{1,10}\\.([a-z0-9]{1,10}\\.)+\\d\\d",
&helpers::child_path(path, "BizSvc"),
config,
collector,
);
if let Some(ref val) = self.mkt_prctc
&& config.validate_optional_fields
{
val.validate(&helpers::child_path(path, "MktPrctc"), config, collector);
}
helpers::validate_pattern(
&self.cre_dt,
"CreDt",
".*(\\+|-)((0[0-9])|(1[0-4])):[0-5][0-9]",
&helpers::child_path(path, "CreDt"),
config,
collector,
);
if let Some(ref val) = self.cpy_dplct
&& config.validate_optional_fields
{
val.validate(&helpers::child_path(path, "CpyDplct"), config, collector);
}
if let Some(ref val) = self.prty
&& config.validate_optional_fields
{
val.validate(&helpers::child_path(path, "Prty"), config, collector);
}
if let Some(ref val) = self.rltd
&& config.validate_optional_fields
{
val.validate(&helpers::child_path(path, "Rltd"), config, collector);
}
}
}
#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq)]
pub struct ClearingSystemIdentification2Choice1 {
#[serde(rename = "Cd", skip_serializing_if = "Option::is_none")]
pub cd: Option<String>,
}
impl Validate for ClearingSystemIdentification2Choice1 {
fn validate(&self, path: &str, config: &ParserConfig, collector: &mut ErrorCollector) {
if let Some(ref val) = self.cd {
helpers::validate_length(
val,
"Cd",
Some(1),
Some(5),
&helpers::child_path(path, "Cd"),
config,
collector,
);
}
}
}
#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq)]
pub struct ClearingSystemMemberIdentification21 {
#[serde(rename = "ClrSysId")]
pub clr_sys_id: ClearingSystemIdentification2Choice1,
#[serde(rename = "MmbId")]
pub mmb_id: String,
}
impl Validate for ClearingSystemMemberIdentification21 {
fn validate(&self, path: &str, config: &ParserConfig, collector: &mut ErrorCollector) {
self.clr_sys_id
.validate(&helpers::child_path(path, "ClrSysId"), config, collector);
helpers::validate_length(
&self.mmb_id,
"MmbId",
Some(1),
Some(28),
&helpers::child_path(path, "MmbId"),
config,
collector,
);
helpers::validate_pattern(
&self.mmb_id,
"MmbId",
"[0-9a-zA-Z/\\-\\?:\\(\\)\\.,'\\+ ]+",
&helpers::child_path(path, "MmbId"),
config,
collector,
);
}
}
#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq)]
pub enum CopyDuplicate1Code {
#[default]
#[serde(rename = "CODU")]
CodeCODU,
#[serde(rename = "COPY")]
CodeCOPY,
#[serde(rename = "DUPL")]
CodeDUPL,
}
impl Validate for CopyDuplicate1Code {
fn validate(&self, _path: &str, _config: &ParserConfig, _collector: &mut ErrorCollector) {
}
}
#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq)]
pub struct FinancialInstitutionIdentification182 {
#[serde(rename = "BICFI")]
pub bicfi: String,
#[serde(rename = "ClrSysMmbId", skip_serializing_if = "Option::is_none")]
pub clr_sys_mmb_id: Option<ClearingSystemMemberIdentification21>,
#[serde(rename = "LEI", skip_serializing_if = "Option::is_none")]
pub lei: Option<String>,
}
impl Validate for FinancialInstitutionIdentification182 {
fn validate(&self, path: &str, config: &ParserConfig, collector: &mut ErrorCollector) {
helpers::validate_pattern(
&self.bicfi,
"BICFI",
"[A-Z0-9]{4,4}[A-Z]{2,2}[A-Z0-9]{2,2}([A-Z0-9]{3,3}){0,1}",
&helpers::child_path(path, "BICFI"),
config,
collector,
);
if let Some(ref val) = self.clr_sys_mmb_id
&& config.validate_optional_fields
{
val.validate(&helpers::child_path(path, "ClrSysMmbId"), config, collector);
}
if let Some(ref val) = self.lei {
helpers::validate_pattern(
val,
"LEI",
"[A-Z0-9]{18,18}[0-9]{2,2}",
&helpers::child_path(path, "LEI"),
config,
collector,
);
}
}
}
#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq)]
pub struct ImplementationSpecification1 {
#[serde(rename = "Regy")]
pub regy: String,
#[serde(rename = "Id")]
pub id: String,
}
impl Validate for ImplementationSpecification1 {
fn validate(&self, path: &str, config: &ParserConfig, collector: &mut ErrorCollector) {
helpers::validate_length(
&self.regy,
"Regy",
Some(1),
Some(350),
&helpers::child_path(path, "Regy"),
config,
collector,
);
helpers::validate_length(
&self.id,
"Id",
Some(1),
Some(2048),
&helpers::child_path(path, "Id"),
config,
collector,
);
}
}
#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq)]
pub struct Party44Choice1 {
#[serde(rename = "FIId", skip_serializing_if = "Option::is_none")]
pub fi_id: Option<BranchAndFinancialInstitutionIdentification62>,
}
impl Validate for Party44Choice1 {
fn validate(&self, path: &str, config: &ParserConfig, collector: &mut ErrorCollector) {
if let Some(ref val) = self.fi_id
&& config.validate_optional_fields
{
val.validate(&helpers::child_path(path, "FIId"), config, collector);
}
}
}
#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq)]
pub enum Priority2Code {
#[default]
#[serde(rename = "HIGH")]
CodeHIGH,
#[serde(rename = "NORM")]
CodeNORM,
}
impl Validate for Priority2Code {
fn validate(&self, _path: &str, _config: &ParserConfig, _collector: &mut ErrorCollector) {
}
}