Skip to content

Commit e7c83fb

Browse files
committed
feat: Add support for MT199 and MT299 message types
Added MT199 and MT299 message parsing support including: - ParsedSwiftMessage enum variants - Message type identification - Parsing logic in SwiftParser - Accessor methods (as_mt199/299, into_mt199/299) - Validation rule mapping
1 parent 48480a9 commit e7c83fb

2 files changed

Lines changed: 42 additions & 2 deletions

File tree

swift-mt-message/src/lib.rs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,10 @@ pub enum ParsedSwiftMessage {
261261
MT292(Box<SwiftMessage<messages::MT292>>),
262262
#[serde(rename = "296")]
263263
MT296(Box<SwiftMessage<messages::MT296>>),
264+
#[serde(rename = "199")]
265+
MT199(Box<SwiftMessage<messages::MT199>>),
266+
#[serde(rename = "299")]
267+
MT299(Box<SwiftMessage<messages::MT299>>),
264268
}
265269

266270
impl ParsedSwiftMessage {
@@ -289,6 +293,8 @@ impl ParsedSwiftMessage {
289293
ParsedSwiftMessage::MT196(_) => "196",
290294
ParsedSwiftMessage::MT292(_) => "292",
291295
ParsedSwiftMessage::MT296(_) => "296",
296+
ParsedSwiftMessage::MT199(_) => "199",
297+
ParsedSwiftMessage::MT299(_) => "299",
292298
}
293299
}
294300
}
@@ -427,6 +433,18 @@ impl ParsedSwiftMessage {
427433
_ => None,
428434
}
429435
}
436+
pub fn as_mt199(&self) -> Option<&SwiftMessage<messages::MT199>> {
437+
match self {
438+
ParsedSwiftMessage::MT199(msg) => Some(msg),
439+
_ => None,
440+
}
441+
}
442+
pub fn as_mt299(&self) -> Option<&SwiftMessage<messages::MT299>> {
443+
match self {
444+
ParsedSwiftMessage::MT299(msg) => Some(msg),
445+
_ => None,
446+
}
447+
}
430448

431449
/// Convert into a specific message type if it matches
432450
pub fn into_mt101(self) -> Option<SwiftMessage<messages::MT101>> {
@@ -561,6 +579,18 @@ impl ParsedSwiftMessage {
561579
_ => None,
562580
}
563581
}
582+
pub fn into_mt199(self) -> Option<SwiftMessage<messages::MT199>> {
583+
match self {
584+
ParsedSwiftMessage::MT199(msg) => Some(*msg),
585+
_ => None,
586+
}
587+
}
588+
pub fn into_mt299(self) -> Option<SwiftMessage<messages::MT299>> {
589+
match self {
590+
ParsedSwiftMessage::MT299(msg) => Some(*msg),
591+
_ => None,
592+
}
593+
}
564594
}
565595

566596
impl<T: SwiftMessageBody> SwiftMessage<T> {
@@ -683,6 +713,8 @@ impl<T: SwiftMessageBody> SwiftMessage<T> {
683713
"196" => messages::MT196::validation_rules(),
684714
"292" => messages::MT292::validation_rules(),
685715
"296" => messages::MT296::validation_rules(),
716+
"199" => messages::MT199::validation_rules(),
717+
"299" => messages::MT299::validation_rules(),
686718
_ => {
687719
return ValidationResult::with_error(ValidationError::BusinessRuleValidation {
688720
rule_name: "UNSUPPORTED_MESSAGE_TYPE".to_string(),

swift-mt-message/src/parser.rs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ use std::collections::HashMap;
33
use crate::errors::{ParseError, Result};
44
use crate::headers::{ApplicationHeader, BasicHeader, Trailer, UserHeader};
55
use crate::messages::{
6-
MT101, MT103, MT104, MT107, MT110, MT111, MT112, MT192, MT196, MT202, MT205, MT210, MT292,
7-
MT296, MT900, MT910, MT920, MT935, MT940, MT941, MT942, MT950,
6+
MT101, MT103, MT104, MT107, MT110, MT111, MT112, MT192, MT196, MT199, MT202, MT205, MT210,
7+
MT292, MT296, MT299, MT900, MT910, MT920, MT935, MT940, MT941, MT942, MT950,
88
};
99
use crate::{ParsedSwiftMessage, RawBlocks, SwiftMessage, SwiftMessageBody};
1010

@@ -164,6 +164,14 @@ impl SwiftParser {
164164
let parsed = Self::parse::<MT296>(raw_message)?;
165165
Ok(ParsedSwiftMessage::MT296(Box::new(parsed)))
166166
}
167+
"199" => {
168+
let parsed = Self::parse::<MT199>(raw_message)?;
169+
Ok(ParsedSwiftMessage::MT199(Box::new(parsed)))
170+
}
171+
"299" => {
172+
let parsed = Self::parse::<MT299>(raw_message)?;
173+
Ok(ParsedSwiftMessage::MT299(Box::new(parsed)))
174+
}
167175
_ => Err(ParseError::UnsupportedMessageType {
168176
message_type: message_type.clone(),
169177
}),

0 commit comments

Comments
 (0)