use crate::parse_result::{ErrorCollector, ParserConfig};
use crate::validation::{Validate, helpers};
use serde::{Deserialize, Serialize};
#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq)]
pub struct MessageHeader91 {
#[serde(rename = "MsgId")]
pub msg_id: String,
#[serde(rename = "CreDtTm")]
pub cre_dt_tm: String,
}
impl Validate for MessageHeader91 {
fn validate(&self, path: &str, config: &ParserConfig, collector: &mut ErrorCollector) {
helpers::validate_length(
&self.msg_id,
"MsgId",
Some(1),
Some(35),
&helpers::child_path(path, "MsgId"),
config,
collector,
);
helpers::validate_pattern(
&self.msg_id,
"MsgId",
"[0-9a-zA-Z/\\-\\?:\\(\\)\\.,'\\+ ]+",
&helpers::child_path(path, "MsgId"),
config,
collector,
);
helpers::validate_pattern(
&self.cre_dt_tm,
"CreDtTm",
".*(\\+|-)((0[0-9])|(1[0-4])):[0-5][0-9]",
&helpers::child_path(path, "CreDtTm"),
config,
collector,
);
}
}
#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq)]
pub struct OriginalMessageAndIssuer11 {
#[serde(rename = "MsgId")]
pub msg_id: String,
#[serde(rename = "MsgNmId")]
pub msg_nm_id: String,
}
impl Validate for OriginalMessageAndIssuer11 {
fn validate(&self, path: &str, config: &ParserConfig, collector: &mut ErrorCollector) {
helpers::validate_length(
&self.msg_id,
"MsgId",
Some(1),
Some(35),
&helpers::child_path(path, "MsgId"),
config,
collector,
);
helpers::validate_pattern(
&self.msg_id,
"MsgId",
"[0-9a-zA-Z/\\-\\?:\\(\\)\\.,'\\+ ]+",
&helpers::child_path(path, "MsgId"),
config,
collector,
);
helpers::validate_length(
&self.msg_nm_id,
"MsgNmId",
Some(1),
Some(35),
&helpers::child_path(path, "MsgNmId"),
config,
collector,
);
helpers::validate_pattern(
&self.msg_nm_id,
"MsgNmId",
"[0-9a-zA-Z/\\-\\?:\\(\\)\\.,'\\+ ]+",
&helpers::child_path(path, "MsgNmId"),
config,
collector,
);
}
}
#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq)]
pub struct Receipt61 {
#[serde(rename = "OrgnlMsgId")]
pub orgnl_msg_id: OriginalMessageAndIssuer11,
#[serde(rename = "ReqHdlg")]
pub req_hdlg: RequestHandling31,
}
impl Validate for Receipt61 {
fn validate(&self, path: &str, config: &ParserConfig, collector: &mut ErrorCollector) {
self.orgnl_msg_id
.validate(&helpers::child_path(path, "OrgnlMsgId"), config, collector);
self.req_hdlg
.validate(&helpers::child_path(path, "ReqHdlg"), config, collector);
}
}
#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq)]
pub struct ReceiptV08 {
#[serde(rename = "MsgHdr")]
pub msg_hdr: MessageHeader91,
#[serde(rename = "RctDtls")]
pub rct_dtls: Vec<Receipt61>,
}
impl Validate for ReceiptV08 {
fn validate(&self, path: &str, config: &ParserConfig, collector: &mut ErrorCollector) {
self.msg_hdr
.validate(&helpers::child_path(path, "MsgHdr"), config, collector);
for item in &self.rct_dtls {
item.validate(&helpers::child_path(path, "RctDtls"), config, collector);
}
}
}
#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq)]
pub struct RequestHandling31 {
#[serde(rename = "Sts")]
pub sts: RequestStatus1Choice1,
#[serde(rename = "StsRsn", skip_serializing_if = "Option::is_none")]
pub sts_rsn: Option<StatusReasonInformation141>,
}
impl Validate for RequestHandling31 {
fn validate(&self, path: &str, config: &ParserConfig, collector: &mut ErrorCollector) {
self.sts
.validate(&helpers::child_path(path, "Sts"), config, collector);
if let Some(ref val) = self.sts_rsn
&& config.validate_optional_fields
{
val.validate(&helpers::child_path(path, "StsRsn"), config, collector);
}
}
}
#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq)]
pub struct RequestStatus1Choice1 {
#[serde(rename = "Cd", skip_serializing_if = "Option::is_none")]
pub cd: Option<String>,
}
impl Validate for RequestStatus1Choice1 {
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(4),
&helpers::child_path(path, "Cd"),
config,
collector,
);
}
}
}
#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq)]
pub struct StatusReason6Choice1 {
#[serde(rename = "Cd", skip_serializing_if = "Option::is_none")]
pub cd: Option<String>,
}
impl Validate for StatusReason6Choice1 {
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(4),
&helpers::child_path(path, "Cd"),
config,
collector,
);
}
}
}
#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq)]
pub struct StatusReasonInformation141 {
#[serde(rename = "Rsn", skip_serializing_if = "Option::is_none")]
pub rsn: Option<StatusReason6Choice1>,
#[serde(rename = "AddtlInf", skip_serializing_if = "Option::is_none")]
pub addtl_inf: Option<Vec<String>>,
}
impl Validate for StatusReasonInformation141 {
fn validate(&self, path: &str, config: &ParserConfig, collector: &mut ErrorCollector) {
if let Some(ref val) = self.rsn
&& config.validate_optional_fields
{
val.validate(&helpers::child_path(path, "Rsn"), config, collector);
}
if let Some(ref vec) = self.addtl_inf {
for item in vec {
helpers::validate_length(
item,
"AddtlInf",
Some(1),
Some(105),
&helpers::child_path(path, "AddtlInf"),
config,
collector,
);
}
}
if let Some(ref vec) = self.addtl_inf {
for item in vec {
helpers::validate_pattern(
item,
"AddtlInf",
"[0-9a-zA-Z/\\-\\?:\\(\\)\\.,'\\+ ]+",
&helpers::child_path(path, "AddtlInf"),
config,
collector,
);
}
}
}
}