swift_mt_message/messages/
mt191.rs1use crate::errors::SwiftValidationError;
2use crate::fields::*;
3use crate::parser::utils::*;
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
13pub struct MT191 {
14 #[serde(rename = "20")]
16 pub field_20: Field20,
17
18 #[serde(rename = "21")]
20 pub field_21: Field21NoOption,
21
22 #[serde(rename = "32B")]
24 pub field_32b: Field32B,
25
26 #[serde(flatten, skip_serializing_if = "Option::is_none")]
28 pub field_52: Option<Field52OrderingInstitution>,
29
30 #[serde(flatten, skip_serializing_if = "Option::is_none")]
32 pub field_57: Option<Field57AccountWithInstitution>,
33
34 #[serde(rename = "71B")]
36 pub field_71b: Field71B,
37
38 #[serde(rename = "72", skip_serializing_if = "Option::is_none")]
40 pub field_72: Option<Field72>,
41}
42
43impl MT191 {
44 pub fn parse_from_block4(block4: &str) -> Result<Self, crate::errors::ParseError> {
46 let mut parser = crate::parser::MessageParser::new(block4, "191");
47
48 let field_20 = parser.parse_field::<Field20>("20")?;
50 let field_21 = parser.parse_field::<Field21NoOption>("21")?;
51 let field_32b = parser.parse_field::<Field32B>("32B")?;
52
53 let field_52 = parser.parse_optional_variant_field::<Field52OrderingInstitution>("52")?;
55 let field_57 =
56 parser.parse_optional_variant_field::<Field57AccountWithInstitution>("57")?;
57
58 let field_71b = parser.parse_field::<Field71B>("71B")?;
60
61 let field_72 = parser.parse_optional_field::<Field72>("72")?;
63
64 Ok(MT191 {
65 field_20,
66 field_21,
67 field_32b,
68 field_52,
69 field_57,
70 field_71b,
71 field_72,
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_32b);
88 append_optional_field(&mut result, &self.field_52);
89 append_optional_field(&mut result, &self.field_57);
90 append_field(&mut result, &self.field_71b);
91 append_optional_field(&mut result, &self.field_72);
92
93 result.push('-');
94 result
95 }
96
97 pub fn validate_network_rules(&self, _stop_on_first_error: bool) -> Vec<SwiftValidationError> {
115 Vec::new()
117 }
118}
119
120impl crate::traits::SwiftMessageBody for MT191 {
121 fn message_type() -> &'static str {
122 "191"
123 }
124
125 fn parse_from_block4(block4: &str) -> Result<Self, crate::errors::ParseError> {
126 MT191::parse_from_block4(block4)
128 }
129
130 fn to_mt_string(&self) -> String {
131 MT191::to_mt_string(self)
133 }
134
135 fn validate_network_rules(&self, stop_on_first_error: bool) -> Vec<SwiftValidationError> {
136 MT191::validate_network_rules(self, stop_on_first_error)
138 }
139}