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