swift_mt_message/messages/
mt112.rs1use crate::errors::SwiftValidationError;
2use crate::fields::*;
3use crate::parser::utils::*;
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
14pub struct MT112 {
15 #[serde(rename = "20")]
17 pub field_20: Field20,
18
19 #[serde(rename = "21")]
21 pub field_21: Field21NoOption,
22
23 #[serde(rename = "30")]
25 pub field_30: Field30,
26
27 #[serde(flatten)]
29 pub field_32: Field32AB,
30
31 #[serde(flatten, skip_serializing_if = "Option::is_none")]
33 pub field_52: Option<Field52OrderingInstitution>,
34
35 #[serde(rename = "59", skip_serializing_if = "Option::is_none")]
37 pub field_59: Option<Field59NoOption>,
38
39 #[serde(rename = "76")]
41 pub field_76: Field76,
42}
43
44impl MT112 {
45 pub fn parse_from_block4(block4: &str) -> Result<Self, crate::errors::ParseError> {
47 let mut parser = crate::parser::MessageParser::new(block4, "112");
48
49 let field_20 = parser.parse_field::<Field20>("20")?;
51 let field_21 = parser.parse_field::<Field21NoOption>("21")?;
52 let field_30 = parser.parse_field::<Field30>("30")?;
53
54 let field_32 = parser.parse_variant_field::<Field32AB>("32")?;
56
57 let field_52 = parser.parse_optional_variant_field::<Field52OrderingInstitution>("52")?;
59 let field_59 = parser.parse_optional_field::<Field59NoOption>("59")?;
60
61 let field_76 = parser.parse_field::<Field76>("76")?;
63
64 Ok(MT112 {
65 field_20,
66 field_21,
67 field_30,
68 field_32,
69 field_52,
70 field_59,
71 field_76,
72 })
73 }
74
75 pub fn parse(input: &str) -> Result<Self, crate::errors::ParseError> {
77 let block4 = extract_block4(input)?;
78 Self::parse_from_block4(&block4)
79 }
80
81 pub fn to_mt_string(&self) -> String {
83 let mut result = String::new();
84
85 append_field(&mut result, &self.field_20);
86 append_field(&mut result, &self.field_21);
87 append_field(&mut result, &self.field_30);
88 append_field(&mut result, &self.field_32);
89 append_optional_field(&mut result, &self.field_52);
90 append_optional_field(&mut result, &self.field_59);
91 append_field(&mut result, &self.field_76);
92
93 result.push('-');
94 result
95 }
96
97 pub fn validate_network_rules(&self, _stop_on_first_error: bool) -> Vec<SwiftValidationError> {
107 Vec::new()
110 }
111}
112
113impl crate::traits::SwiftMessageBody for MT112 {
114 fn message_type() -> &'static str {
115 "112"
116 }
117
118 fn parse_from_block4(block4: &str) -> Result<Self, crate::errors::ParseError> {
119 MT112::parse_from_block4(block4)
121 }
122
123 fn to_mt_string(&self) -> String {
124 MT112::to_mt_string(self)
126 }
127
128 fn validate_network_rules(&self, stop_on_first_error: bool) -> Vec<SwiftValidationError> {
129 MT112::validate_network_rules(self, stop_on_first_error)
131 }
132}