use validator::Validate;
::lazy_static::lazy_static! {
static ref LEI_IDENTIFIER_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[A-Z0-9]{18,18}[0-9]{2,2}"#).unwrap();
}
::lazy_static::lazy_static! {
static ref ACTIVE_CURRENCY_CODE_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[A-Z]{3,3}"#).unwrap();
}
::lazy_static::lazy_static! {
static ref COUNTRY_CODE_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[A-Z]{2,2}"#).unwrap();
}
::lazy_static::lazy_static! {
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();
}
::lazy_static::lazy_static! {
static ref MAX_10_NUMERIC_TEXT_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[0-9]{1,10}"#).unwrap();
}
::lazy_static::lazy_static! {
static ref MAX_5_NUMERIC_TEXT_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[0-9]{1,5}"#).unwrap();
}
pub fn namespace() -> String {
"urn:iso:std:iso:20022:tech:xsd:camt.088.001.01".to_string()
}
#[derive(
Debug,
Default,
Clone,
PartialEq,
::serde::Serialize,
::serde::Deserialize,
::derive_builder::Builder,
::validator::Validate,
)]
pub struct LeiIdentifier {
#[validate(regex = "LEI_IDENTIFIER_REGEX")]
#[serde(rename = "$text")]
pub value: String,
}
#[derive(
Debug,
Default,
Clone,
PartialEq,
::serde::Serialize,
::serde::Deserialize,
::derive_builder::Builder,
::validator::Validate,
)]
pub struct ExternalClearingSystemIdentification1Code {
#[validate(length(min = 1, max = 5,))]
#[serde(rename = "$text")]
pub value: String,
}
#[derive(
Debug,
Default,
Clone,
PartialEq,
::serde::Serialize,
::serde::Deserialize,
::derive_builder::Builder,
::validator::Validate,
)]
pub struct IsoDateTime {
#[serde(rename = "$text")]
pub value: ::chrono::DateTime<::chrono::Utc>,
}
#[derive(
Debug,
Default,
Clone,
PartialEq,
::serde::Serialize,
::serde::Deserialize,
::derive_builder::Builder,
::validator::Validate,
)]
pub struct NettingIdentification1ChoiceEnum {
#[serde(rename = "TradPty", skip_serializing_if = "Option::is_none")]
pub trad_pty: Option<PartyIdentification73Choice>,
#[serde(rename = "NetgGrpId", skip_serializing_if = "Option::is_none")]
pub netg_grp_id: Option<Max35Text>,
}
#[derive(
Debug,
Default,
Clone,
PartialEq,
::serde::Serialize,
::serde::Deserialize,
::derive_builder::Builder,
::validator::Validate,
)]
pub struct NettingIdentification1Choice {
#[serde(flatten)]
pub value: NettingIdentification1ChoiceEnum,
}
#[derive(
Debug,
Default,
Clone,
PartialEq,
::serde::Serialize,
::serde::Deserialize,
::derive_builder::Builder,
::validator::Validate,
)]
pub struct Max105Text {
#[validate(length(min = 1, max = 105,))]
#[serde(rename = "$text")]
pub value: String,
}
#[derive(
Debug,
Default,
Clone,
PartialEq,
::serde::Serialize,
::serde::Deserialize,
::derive_builder::Builder,
::validator::Validate,
)]
pub struct Max34Text {
#[validate(length(min = 1, max = 34,))]
#[serde(rename = "$text")]
pub value: String,
}
#[derive(
Debug,
Default,
Clone,
PartialEq,
::serde::Serialize,
::serde::Deserialize,
::derive_builder::Builder,
::validator::Validate,
)]
pub struct IsoDate {
#[serde(rename = "$text")]
pub value: ::chrono::NaiveDate,
}
#[derive(
Debug,
Default,
Clone,
PartialEq,
::serde::Serialize,
::serde::Deserialize,
::derive_builder::Builder,
::validator::Validate,
)]
pub struct Pagination {
#[validate]
#[serde(rename = "PgNb")]
pub pg_nb: Max5NumericText,
#[validate]
#[serde(rename = "LastPgInd")]
pub last_pg_ind: YesNoIndicator,
}
#[derive(
Debug,
Default,
Clone,
PartialEq,
::serde::Serialize,
::serde::Deserialize,
::derive_builder::Builder,
::validator::Validate,
)]
pub struct YesNoIndicator {
#[serde(rename = "$text")]
pub value: bool,
}
#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
pub enum AddressType2Code {
#[serde(rename = "ADDR")]
Addr,
#[serde(rename = "PBOX")]
Pbox,
#[serde(rename = "HOME")]
Home,
#[serde(rename = "BIZZ")]
Bizz,
#[serde(rename = "MLTO")]
Mlto,
#[serde(rename = "DLVY")]
Dlvy,
#[default]
Unknown,
}
#[derive(
Debug,
Default,
Clone,
PartialEq,
::serde::Serialize,
::serde::Deserialize,
::derive_builder::Builder,
::validator::Validate,
)]
pub struct Max350Text {
#[validate(length(min = 1, max = 350,))]
#[serde(rename = "$text")]
pub value: String,
}
#[derive(
Debug,
Default,
Clone,
PartialEq,
::serde::Serialize,
::serde::Deserialize,
::derive_builder::Builder,
::validator::Validate,
)]
pub struct SupplementaryData1<
A: std::fmt::Debug + Default + Clone + PartialEq + ::serde::Serialize + ::validator::Validate,
> {
#[serde(rename = "PlcAndNm", skip_serializing_if = "Option::is_none")]
pub plc_and_nm: Option<Max350Text>,
#[validate]
#[serde(rename = "Envlp")]
pub envlp: SupplementaryDataEnvelope1<A>,
}
#[derive(
Debug,
Default,
Clone,
PartialEq,
::serde::Serialize,
::serde::Deserialize,
::derive_builder::Builder,
::validator::Validate,
)]
pub struct NetReportData1 {
#[validate]
#[serde(rename = "MsgId")]
pub msg_id: Max35Text,
#[validate]
#[serde(rename = "CreDtTm")]
pub cre_dt_tm: IsoDateTime,
#[validate]
#[serde(rename = "NetgCutOffTm")]
pub netg_cut_off_tm: IsoTime,
#[validate]
#[serde(rename = "RptDt")]
pub rpt_dt: IsoDate,
#[validate]
#[serde(rename = "ValDt")]
pub val_dt: IsoDate,
#[serde(rename = "RptTp", skip_serializing_if = "Option::is_none")]
pub rpt_tp: Option<Max35Text>,
#[serde(rename = "NetRptSvcr", skip_serializing_if = "Option::is_none")]
pub net_rpt_svcr: Option<PartyIdentification73Choice>,
#[serde(rename = "NetSvcTp", skip_serializing_if = "Option::is_none")]
pub net_svc_tp: Option<Max35Text>,
#[serde(rename = "MsgPgntn", skip_serializing_if = "Option::is_none")]
pub msg_pgntn: Option<Pagination>,
}
#[derive(
Debug,
Default,
Clone,
PartialEq,
::serde::Serialize,
::serde::Deserialize,
::derive_builder::Builder,
::validator::Validate,
)]
pub struct ActiveCurrencyCode {
#[validate(regex = "ACTIVE_CURRENCY_CODE_REGEX")]
#[serde(rename = "$text")]
pub value: String,
}
#[derive(
Debug,
Default,
Clone,
PartialEq,
::serde::Serialize,
::serde::Deserialize,
::derive_builder::Builder,
::validator::Validate,
)]
pub struct NetReportV01<
A: std::fmt::Debug + Default + Clone + PartialEq + ::serde::Serialize + ::validator::Validate,
> {
#[validate]
#[serde(rename = "NetRptData")]
pub net_rpt_data: NetReportData1,
#[serde(rename = "NetSvcPtcptId")]
pub net_svc_ptcpt_id: PartyIdentification73Choice,
#[serde(rename = "NetSvcCtrPtyId", skip_serializing_if = "Option::is_none")]
pub net_svc_ctr_pty_id: Option<PartyIdentification73Choice>,
#[validate(length(min = 1,))]
#[serde(rename = "NetOblgtn", default)]
pub net_oblgtn: Vec<NetObligation1>,
#[validate(length(min = 0,))]
#[serde(rename = "SplmtryData", default)]
pub splmtry_data: Vec<SupplementaryData1<A>>,
}
#[derive(
Debug,
Default,
Clone,
PartialEq,
::serde::Serialize,
::serde::Deserialize,
::derive_builder::Builder,
::validator::Validate,
)]
pub struct PartyIdentification59 {
#[serde(rename = "PtyNm", skip_serializing_if = "Option::is_none")]
pub pty_nm: Option<Max34Text>,
#[serde(rename = "AnyBIC", skip_serializing_if = "Option::is_none")]
pub any_bic: Option<PartyIdentification44>,
#[serde(rename = "AcctNb", skip_serializing_if = "Option::is_none")]
pub acct_nb: Option<Max34Text>,
#[serde(rename = "Adr", skip_serializing_if = "Option::is_none")]
pub adr: Option<Max105Text>,
#[serde(rename = "ClrSysId", skip_serializing_if = "Option::is_none")]
pub clr_sys_id: Option<ClearingSystemIdentification2Choice>,
#[serde(rename = "LglNttyIdr", skip_serializing_if = "Option::is_none")]
pub lgl_ntty_idr: Option<LeiIdentifier>,
}
#[derive(
Debug,
Default,
Clone,
PartialEq,
::serde::Serialize,
::serde::Deserialize,
::derive_builder::Builder,
::validator::Validate,
)]
pub struct NetObligation1 {
#[validate]
#[serde(rename = "OblgtnId")]
pub oblgtn_id: Max35Text,
#[validate]
#[serde(rename = "Amt")]
pub amt: ActiveCurrencyAndAmount,
#[serde(rename = "PtcptNetgId")]
pub ptcpt_netg_id: NettingIdentification1Choice,
#[serde(rename = "OblgtnDrctn")]
pub oblgtn_drctn: PaymentReceipt1Code,
#[serde(rename = "CtrPtyNetgId")]
pub ctr_pty_netg_id: NettingIdentification1Choice,
#[serde(rename = "NetSvcCtrPtyId", skip_serializing_if = "Option::is_none")]
pub net_svc_ctr_pty_id: Option<PartyIdentification73Choice>,
#[serde(rename = "CtrPtySttlmInstrs", skip_serializing_if = "Option::is_none")]
pub ctr_pty_sttlm_instrs: Option<SettlementParties29>,
#[serde(rename = "TxsNb", skip_serializing_if = "Option::is_none")]
pub txs_nb: Option<Max10NumericText>,
}
#[derive(
Debug,
Default,
Clone,
PartialEq,
::serde::Serialize,
::serde::Deserialize,
::derive_builder::Builder,
::validator::Validate,
)]
pub struct CountryCode {
#[validate(regex = "COUNTRY_CODE_REGEX")]
#[serde(rename = "$text")]
pub value: String,
}
#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
pub enum PaymentReceipt1Code {
#[serde(rename = "PAYM")]
Paym,
#[serde(rename = "RECE")]
Rece,
#[serde(rename = "NONE")]
None,
#[default]
Unknown,
}
#[derive(
Debug,
Default,
Clone,
PartialEq,
::serde::Serialize,
::serde::Deserialize,
::derive_builder::Builder,
::validator::Validate,
)]
pub struct ClearingSystemIdentification2ChoiceEnum {
#[serde(rename = "Prtry", skip_serializing_if = "Option::is_none")]
pub prtry: Option<Max35Text>,
#[serde(rename = "Cd", skip_serializing_if = "Option::is_none")]
pub cd: Option<ExternalClearingSystemIdentification1Code>,
}
#[derive(
Debug,
Default,
Clone,
PartialEq,
::serde::Serialize,
::serde::Deserialize,
::derive_builder::Builder,
::validator::Validate,
)]
pub struct ClearingSystemIdentification2Choice {
#[serde(flatten)]
pub value: ClearingSystemIdentification2ChoiceEnum,
}
#[derive(
Debug,
Default,
Clone,
PartialEq,
::serde::Serialize,
::serde::Deserialize,
::derive_builder::Builder,
::validator::Validate,
)]
pub struct AnyBicIdentifier {
#[validate(regex = "ANY_BIC_IDENTIFIER_REGEX")]
#[serde(rename = "$text")]
pub value: String,
}
#[derive(
Debug,
Default,
Clone,
PartialEq,
::serde::Serialize,
::serde::Deserialize,
::derive_builder::Builder,
::validator::Validate,
)]
pub struct ActiveCurrencyAndAmount {
#[serde(rename = "ActiveCurrencyAndAmount")]
pub value: ActiveCurrencyAndAmountSimpleType,
#[serde(rename = "@Ccy")]
pub ccy: ActiveCurrencyCode,
}
#[derive(
Debug,
Default,
Clone,
PartialEq,
::serde::Serialize,
::serde::Deserialize,
::derive_builder::Builder,
::validator::Validate,
)]
pub struct IsoTime {
#[serde(rename = "$value")]
pub value: ::chrono::naive::NaiveTime,
}
#[derive(
Debug,
Default,
Clone,
PartialEq,
::serde::Serialize,
::serde::Deserialize,
::derive_builder::Builder,
::validator::Validate,
)]
pub struct Max10NumericText {
#[validate(regex = "MAX_10_NUMERIC_TEXT_REGEX")]
#[serde(rename = "$text")]
pub value: String,
}
#[derive(
Debug,
Default,
Clone,
PartialEq,
::serde::Serialize,
::serde::Deserialize,
::derive_builder::Builder,
::validator::Validate,
)]
pub struct SupplementaryDataEnvelope1<
A: std::fmt::Debug + Default + Clone + PartialEq + ::serde::Serialize + ::validator::Validate,
> {
#[validate]
#[serde(flatten)]
pub value: A,
}
#[derive(
Debug,
Default,
Clone,
PartialEq,
::serde::Serialize,
::serde::Deserialize,
::derive_builder::Builder,
::validator::Validate,
)]
pub struct Max5NumericText {
#[validate(regex = "MAX_5_NUMERIC_TEXT_REGEX")]
#[serde(rename = "$text")]
pub value: String,
}
#[derive(
Debug,
Default,
Clone,
PartialEq,
::serde::Serialize,
::serde::Deserialize,
::derive_builder::Builder,
::validator::Validate,
)]
pub struct PostalAddress1 {
#[serde(rename = "AdrTp", skip_serializing_if = "Option::is_none")]
pub adr_tp: Option<AddressType2Code>,
#[validate(length(min = 0, max = 5,))]
#[serde(rename = "AdrLine", default)]
pub adr_line: Vec<Max70Text>,
#[serde(rename = "StrtNm", skip_serializing_if = "Option::is_none")]
pub strt_nm: Option<Max70Text>,
#[serde(rename = "BldgNb", skip_serializing_if = "Option::is_none")]
pub bldg_nb: Option<Max16Text>,
#[serde(rename = "PstCd", skip_serializing_if = "Option::is_none")]
pub pst_cd: Option<Max16Text>,
#[serde(rename = "TwnNm", skip_serializing_if = "Option::is_none")]
pub twn_nm: Option<Max35Text>,
#[serde(rename = "CtrySubDvsn", skip_serializing_if = "Option::is_none")]
pub ctry_sub_dvsn: Option<Max35Text>,
#[serde(rename = "Ctry")]
pub ctry: CountryCode,
}
#[derive(
Debug,
Default,
Clone,
PartialEq,
::serde::Serialize,
::serde::Deserialize,
::derive_builder::Builder,
::validator::Validate,
)]
pub struct Max35Text {
#[validate(length(min = 1, max = 35,))]
#[serde(rename = "$text")]
pub value: String,
}
#[derive(
Debug,
Default,
Clone,
PartialEq,
::serde::Serialize,
::serde::Deserialize,
::derive_builder::Builder,
::validator::Validate,
)]
pub struct Max16Text {
#[validate(length(min = 1, max = 16,))]
#[serde(rename = "$text")]
pub value: String,
}
#[derive(
Debug,
Default,
Clone,
PartialEq,
::serde::Serialize,
::serde::Deserialize,
::derive_builder::Builder,
::validator::Validate,
)]
pub struct Max70Text {
#[validate(length(min = 1, max = 70,))]
#[serde(rename = "$text")]
pub value: String,
}
#[derive(
Debug,
Default,
Clone,
PartialEq,
::serde::Serialize,
::serde::Deserialize,
::derive_builder::Builder,
::validator::Validate,
)]
pub struct SettlementParties29 {
#[serde(rename = "DlvryAgt", skip_serializing_if = "Option::is_none")]
pub dlvry_agt: Option<PartyIdentification73Choice>,
#[serde(rename = "Intrmy", skip_serializing_if = "Option::is_none")]
pub intrmy: Option<PartyIdentification73Choice>,
#[serde(rename = "RcvgAgt")]
pub rcvg_agt: PartyIdentification73Choice,
#[serde(rename = "BnfcryInstn", skip_serializing_if = "Option::is_none")]
pub bnfcry_instn: Option<PartyIdentification73Choice>,
}
#[derive(
Debug,
Default,
Clone,
PartialEq,
::serde::Serialize,
::serde::Deserialize,
::derive_builder::Builder,
::validator::Validate,
)]
pub struct PartyIdentification44 {
#[validate]
#[serde(rename = "AnyBIC")]
pub any_bic: AnyBicIdentifier,
#[validate(length(min = 0, max = 10,))]
#[serde(rename = "AltrntvIdr", default)]
pub altrntv_idr: Vec<Max35Text>,
}
#[derive(
Debug,
Default,
Clone,
PartialEq,
::serde::Serialize,
::serde::Deserialize,
::derive_builder::Builder,
::validator::Validate,
)]
pub struct PartyIdentification73ChoiceEnum {
#[serde(rename = "PtyId", skip_serializing_if = "Option::is_none")]
pub pty_id: Option<PartyIdentification59>,
#[serde(rename = "AnyBIC", skip_serializing_if = "Option::is_none")]
pub any_bic: Option<PartyIdentification44>,
#[serde(rename = "NmAndAdr", skip_serializing_if = "Option::is_none")]
pub nm_and_adr: Option<NameAndAddress8>,
}
#[derive(
Debug,
Default,
Clone,
PartialEq,
::serde::Serialize,
::serde::Deserialize,
::derive_builder::Builder,
::validator::Validate,
)]
pub struct PartyIdentification73Choice {
#[serde(flatten)]
pub value: PartyIdentification73ChoiceEnum,
}
#[derive(
Debug,
Default,
Clone,
PartialEq,
::serde::Serialize,
::serde::Deserialize,
::derive_builder::Builder,
::validator::Validate,
)]
pub struct NameAndAddress8 {
#[validate]
#[serde(rename = "Nm")]
pub nm: Max350Text,
#[serde(rename = "Adr", skip_serializing_if = "Option::is_none")]
pub adr: Option<PostalAddress1>,
#[validate(length(min = 0, max = 10,))]
#[serde(rename = "AltrntvIdr", default)]
pub altrntv_idr: Vec<Max35Text>,
}
#[derive(
Debug,
Default,
Clone,
PartialEq,
::serde::Serialize,
::serde::Deserialize,
::derive_builder::Builder,
::validator::Validate,
)]
pub struct ActiveCurrencyAndAmountSimpleType {
#[validate(range(min = 0,))]
#[serde(rename = "$text")]
pub value: f64,
}
#[derive(
Debug,
Default,
Clone,
PartialEq,
::serde::Serialize,
::serde::Deserialize,
::derive_builder::Builder,
::validator::Validate,
)]
#[serde(rename = "Document")]
pub struct Document<
A: std::fmt::Debug + Default + Clone + PartialEq + ::serde::Serialize + ::validator::Validate,
> {
#[validate]
#[serde(rename = "NetRpt")]
pub net_rpt: NetReportV01<A>,
#[serde(rename = "@xmlns", default = "namespace")]
pub xmlns: String,
}