swift_mt_message/
parsed_message.rs

1//! # ParsedSwiftMessage
2//!
3//! Enum for automatic message type detection and parsing. Used by `SwiftParser::parse_auto()`.
4
5use crate::{ValidationResult, messages::*, swift_message::SwiftMessage};
6use serde::{Deserialize, Serialize};
7
8/// Enum of all supported SWIFT message types (30+ types)
9#[derive(Debug, Clone, Serialize, Deserialize)]
10#[serde(tag = "mt_type")]
11pub enum ParsedSwiftMessage {
12    #[serde(rename = "101")]
13    MT101(Box<SwiftMessage<MT101>>),
14    #[serde(rename = "103")]
15    MT103(Box<SwiftMessage<MT103>>),
16    #[serde(rename = "104")]
17    MT104(Box<SwiftMessage<MT104>>),
18    #[serde(rename = "107")]
19    MT107(Box<SwiftMessage<MT107>>),
20    #[serde(rename = "110")]
21    MT110(Box<SwiftMessage<MT110>>),
22    #[serde(rename = "111")]
23    MT111(Box<SwiftMessage<MT111>>),
24    #[serde(rename = "112")]
25    MT112(Box<SwiftMessage<MT112>>),
26    #[serde(rename = "190")]
27    MT190(Box<SwiftMessage<MT190>>),
28    #[serde(rename = "191")]
29    MT191(Box<SwiftMessage<MT191>>),
30    #[serde(rename = "200")]
31    MT200(Box<SwiftMessage<MT200>>),
32    #[serde(rename = "202")]
33    MT202(Box<SwiftMessage<MT202>>),
34    #[serde(rename = "204")]
35    MT204(Box<SwiftMessage<MT204>>),
36    #[serde(rename = "205")]
37    MT205(Box<SwiftMessage<MT205>>),
38    #[serde(rename = "210")]
39    MT210(Box<SwiftMessage<MT210>>),
40    #[serde(rename = "290")]
41    MT290(Box<SwiftMessage<MT290>>),
42    #[serde(rename = "291")]
43    MT291(Box<SwiftMessage<MT291>>),
44    #[serde(rename = "900")]
45    MT900(Box<SwiftMessage<MT900>>),
46    #[serde(rename = "910")]
47    MT910(Box<SwiftMessage<MT910>>),
48    #[serde(rename = "920")]
49    MT920(Box<SwiftMessage<MT920>>),
50    #[serde(rename = "935")]
51    MT935(Box<SwiftMessage<MT935>>),
52    #[serde(rename = "940")]
53    MT940(Box<SwiftMessage<MT940>>),
54    #[serde(rename = "941")]
55    MT941(Box<SwiftMessage<MT941>>),
56    #[serde(rename = "942")]
57    MT942(Box<SwiftMessage<MT942>>),
58    #[serde(rename = "950")]
59    MT950(Box<SwiftMessage<MT950>>),
60    #[serde(rename = "192")]
61    MT192(Box<SwiftMessage<MT192>>),
62    #[serde(rename = "196")]
63    MT196(Box<SwiftMessage<MT196>>),
64    #[serde(rename = "292")]
65    MT292(Box<SwiftMessage<MT292>>),
66    #[serde(rename = "296")]
67    MT296(Box<SwiftMessage<MT296>>),
68    #[serde(rename = "199")]
69    MT199(Box<SwiftMessage<MT199>>),
70    #[serde(rename = "299")]
71    MT299(Box<SwiftMessage<MT299>>),
72}
73
74impl ParsedSwiftMessage {
75    /// Get the message type as a string
76    pub fn message_type(&self) -> &'static str {
77        match self {
78            ParsedSwiftMessage::MT101(_) => "101",
79            ParsedSwiftMessage::MT103(_) => "103",
80            ParsedSwiftMessage::MT104(_) => "104",
81            ParsedSwiftMessage::MT107(_) => "107",
82            ParsedSwiftMessage::MT110(_) => "110",
83            ParsedSwiftMessage::MT111(_) => "111",
84            ParsedSwiftMessage::MT112(_) => "112",
85            ParsedSwiftMessage::MT190(_) => "190",
86            ParsedSwiftMessage::MT191(_) => "191",
87            ParsedSwiftMessage::MT200(_) => "200",
88            ParsedSwiftMessage::MT202(_) => "202",
89            ParsedSwiftMessage::MT204(_) => "204",
90            ParsedSwiftMessage::MT205(_) => "205",
91            ParsedSwiftMessage::MT210(_) => "210",
92            ParsedSwiftMessage::MT290(_) => "290",
93            ParsedSwiftMessage::MT291(_) => "291",
94            ParsedSwiftMessage::MT900(_) => "900",
95            ParsedSwiftMessage::MT910(_) => "910",
96            ParsedSwiftMessage::MT920(_) => "920",
97            ParsedSwiftMessage::MT935(_) => "935",
98            ParsedSwiftMessage::MT940(_) => "940",
99            ParsedSwiftMessage::MT941(_) => "941",
100            ParsedSwiftMessage::MT942(_) => "942",
101            ParsedSwiftMessage::MT950(_) => "950",
102            ParsedSwiftMessage::MT192(_) => "192",
103            ParsedSwiftMessage::MT196(_) => "196",
104            ParsedSwiftMessage::MT292(_) => "292",
105            ParsedSwiftMessage::MT296(_) => "296",
106            ParsedSwiftMessage::MT199(_) => "199",
107            ParsedSwiftMessage::MT299(_) => "299",
108        }
109    }
110
111    /// Convert to a specific message type if it matches
112    pub fn as_mt101(&self) -> Option<&SwiftMessage<MT101>> {
113        match self {
114            ParsedSwiftMessage::MT101(msg) => Some(msg),
115            _ => None,
116        }
117    }
118    pub fn as_mt103(&self) -> Option<&SwiftMessage<MT103>> {
119        match self {
120            ParsedSwiftMessage::MT103(msg) => Some(msg),
121            _ => None,
122        }
123    }
124    pub fn as_mt104(&self) -> Option<&SwiftMessage<MT104>> {
125        match self {
126            ParsedSwiftMessage::MT104(msg) => Some(msg),
127            _ => None,
128        }
129    }
130    pub fn as_mt107(&self) -> Option<&SwiftMessage<MT107>> {
131        match self {
132            ParsedSwiftMessage::MT107(msg) => Some(msg),
133            _ => None,
134        }
135    }
136    pub fn as_mt110(&self) -> Option<&SwiftMessage<MT110>> {
137        match self {
138            ParsedSwiftMessage::MT110(msg) => Some(msg),
139            _ => None,
140        }
141    }
142    pub fn as_mt111(&self) -> Option<&SwiftMessage<MT111>> {
143        match self {
144            ParsedSwiftMessage::MT111(msg) => Some(msg),
145            _ => None,
146        }
147    }
148    pub fn as_mt112(&self) -> Option<&SwiftMessage<MT112>> {
149        match self {
150            ParsedSwiftMessage::MT112(msg) => Some(msg),
151            _ => None,
152        }
153    }
154    pub fn as_mt190(&self) -> Option<&SwiftMessage<MT190>> {
155        match self {
156            ParsedSwiftMessage::MT190(msg) => Some(msg),
157            _ => None,
158        }
159    }
160    pub fn as_mt191(&self) -> Option<&SwiftMessage<MT191>> {
161        match self {
162            ParsedSwiftMessage::MT191(msg) => Some(msg),
163            _ => None,
164        }
165    }
166    pub fn as_mt200(&self) -> Option<&SwiftMessage<MT200>> {
167        match self {
168            ParsedSwiftMessage::MT200(msg) => Some(msg),
169            _ => None,
170        }
171    }
172    pub fn as_mt202(&self) -> Option<&SwiftMessage<MT202>> {
173        match self {
174            ParsedSwiftMessage::MT202(msg) => Some(msg),
175            _ => None,
176        }
177    }
178    pub fn as_mt204(&self) -> Option<&SwiftMessage<MT204>> {
179        match self {
180            ParsedSwiftMessage::MT204(msg) => Some(msg),
181            _ => None,
182        }
183    }
184    pub fn as_mt205(&self) -> Option<&SwiftMessage<MT205>> {
185        match self {
186            ParsedSwiftMessage::MT205(msg) => Some(msg),
187            _ => None,
188        }
189    }
190    pub fn as_mt210(&self) -> Option<&SwiftMessage<MT210>> {
191        match self {
192            ParsedSwiftMessage::MT210(msg) => Some(msg),
193            _ => None,
194        }
195    }
196    pub fn as_mt290(&self) -> Option<&SwiftMessage<MT290>> {
197        match self {
198            ParsedSwiftMessage::MT290(msg) => Some(msg),
199            _ => None,
200        }
201    }
202    pub fn as_mt291(&self) -> Option<&SwiftMessage<MT291>> {
203        match self {
204            ParsedSwiftMessage::MT291(msg) => Some(msg),
205            _ => None,
206        }
207    }
208    pub fn as_mt900(&self) -> Option<&SwiftMessage<MT900>> {
209        match self {
210            ParsedSwiftMessage::MT900(msg) => Some(msg),
211            _ => None,
212        }
213    }
214    pub fn as_mt910(&self) -> Option<&SwiftMessage<MT910>> {
215        match self {
216            ParsedSwiftMessage::MT910(msg) => Some(msg),
217            _ => None,
218        }
219    }
220    pub fn as_mt920(&self) -> Option<&SwiftMessage<MT920>> {
221        match self {
222            ParsedSwiftMessage::MT920(msg) => Some(msg),
223            _ => None,
224        }
225    }
226    pub fn as_mt935(&self) -> Option<&SwiftMessage<MT935>> {
227        match self {
228            ParsedSwiftMessage::MT935(msg) => Some(msg),
229            _ => None,
230        }
231    }
232    pub fn as_mt940(&self) -> Option<&SwiftMessage<MT940>> {
233        match self {
234            ParsedSwiftMessage::MT940(msg) => Some(msg),
235            _ => None,
236        }
237    }
238    pub fn as_mt941(&self) -> Option<&SwiftMessage<MT941>> {
239        match self {
240            ParsedSwiftMessage::MT941(msg) => Some(msg),
241            _ => None,
242        }
243    }
244    pub fn as_mt942(&self) -> Option<&SwiftMessage<MT942>> {
245        match self {
246            ParsedSwiftMessage::MT942(msg) => Some(msg),
247            _ => None,
248        }
249    }
250    pub fn as_mt950(&self) -> Option<&SwiftMessage<MT950>> {
251        match self {
252            ParsedSwiftMessage::MT950(msg) => Some(msg),
253            _ => None,
254        }
255    }
256    pub fn as_mt192(&self) -> Option<&SwiftMessage<MT192>> {
257        match self {
258            ParsedSwiftMessage::MT192(msg) => Some(msg),
259            _ => None,
260        }
261    }
262    pub fn as_mt196(&self) -> Option<&SwiftMessage<MT196>> {
263        match self {
264            ParsedSwiftMessage::MT196(msg) => Some(msg),
265            _ => None,
266        }
267    }
268    pub fn as_mt292(&self) -> Option<&SwiftMessage<MT292>> {
269        match self {
270            ParsedSwiftMessage::MT292(msg) => Some(msg),
271            _ => None,
272        }
273    }
274    pub fn as_mt296(&self) -> Option<&SwiftMessage<MT296>> {
275        match self {
276            ParsedSwiftMessage::MT296(msg) => Some(msg),
277            _ => None,
278        }
279    }
280    pub fn as_mt199(&self) -> Option<&SwiftMessage<MT199>> {
281        match self {
282            ParsedSwiftMessage::MT199(msg) => Some(msg),
283            _ => None,
284        }
285    }
286    pub fn as_mt299(&self) -> Option<&SwiftMessage<MT299>> {
287        match self {
288            ParsedSwiftMessage::MT299(msg) => Some(msg),
289            _ => None,
290        }
291    }
292
293    /// Convert into a specific message type if it matches
294    pub fn into_mt101(self) -> Option<SwiftMessage<MT101>> {
295        match self {
296            ParsedSwiftMessage::MT101(msg) => Some(*msg),
297            _ => None,
298        }
299    }
300    pub fn into_mt103(self) -> Option<SwiftMessage<MT103>> {
301        match self {
302            ParsedSwiftMessage::MT103(msg) => Some(*msg),
303            _ => None,
304        }
305    }
306    pub fn into_mt104(self) -> Option<SwiftMessage<MT104>> {
307        match self {
308            ParsedSwiftMessage::MT104(msg) => Some(*msg),
309            _ => None,
310        }
311    }
312    pub fn into_mt107(self) -> Option<SwiftMessage<MT107>> {
313        match self {
314            ParsedSwiftMessage::MT107(msg) => Some(*msg),
315            _ => None,
316        }
317    }
318    pub fn into_mt110(self) -> Option<SwiftMessage<MT110>> {
319        match self {
320            ParsedSwiftMessage::MT110(msg) => Some(*msg),
321            _ => None,
322        }
323    }
324    pub fn into_mt111(self) -> Option<SwiftMessage<MT111>> {
325        match self {
326            ParsedSwiftMessage::MT111(msg) => Some(*msg),
327            _ => None,
328        }
329    }
330    pub fn into_mt112(self) -> Option<SwiftMessage<MT112>> {
331        match self {
332            ParsedSwiftMessage::MT112(msg) => Some(*msg),
333            _ => None,
334        }
335    }
336    pub fn into_mt190(self) -> Option<SwiftMessage<MT190>> {
337        match self {
338            ParsedSwiftMessage::MT190(msg) => Some(*msg),
339            _ => None,
340        }
341    }
342    pub fn into_mt191(self) -> Option<SwiftMessage<MT191>> {
343        match self {
344            ParsedSwiftMessage::MT191(msg) => Some(*msg),
345            _ => None,
346        }
347    }
348    pub fn into_mt192(self) -> Option<SwiftMessage<MT192>> {
349        match self {
350            ParsedSwiftMessage::MT192(msg) => Some(*msg),
351            _ => None,
352        }
353    }
354    pub fn into_mt196(self) -> Option<SwiftMessage<MT196>> {
355        match self {
356            ParsedSwiftMessage::MT196(msg) => Some(*msg),
357            _ => None,
358        }
359    }
360    pub fn into_mt199(self) -> Option<SwiftMessage<MT199>> {
361        match self {
362            ParsedSwiftMessage::MT199(msg) => Some(*msg),
363            _ => None,
364        }
365    }
366    pub fn into_mt200(self) -> Option<SwiftMessage<MT200>> {
367        match self {
368            ParsedSwiftMessage::MT200(msg) => Some(*msg),
369            _ => None,
370        }
371    }
372    pub fn into_mt202(self) -> Option<SwiftMessage<MT202>> {
373        match self {
374            ParsedSwiftMessage::MT202(msg) => Some(*msg),
375            _ => None,
376        }
377    }
378    pub fn into_mt204(self) -> Option<SwiftMessage<MT204>> {
379        match self {
380            ParsedSwiftMessage::MT204(msg) => Some(*msg),
381            _ => None,
382        }
383    }
384    pub fn into_mt205(self) -> Option<SwiftMessage<MT205>> {
385        match self {
386            ParsedSwiftMessage::MT205(msg) => Some(*msg),
387            _ => None,
388        }
389    }
390    pub fn into_mt210(self) -> Option<SwiftMessage<MT210>> {
391        match self {
392            ParsedSwiftMessage::MT210(msg) => Some(*msg),
393            _ => None,
394        }
395    }
396    pub fn into_mt290(self) -> Option<SwiftMessage<MT290>> {
397        match self {
398            ParsedSwiftMessage::MT290(msg) => Some(*msg),
399            _ => None,
400        }
401    }
402    pub fn into_mt291(self) -> Option<SwiftMessage<MT291>> {
403        match self {
404            ParsedSwiftMessage::MT291(msg) => Some(*msg),
405            _ => None,
406        }
407    }
408    pub fn into_mt292(self) -> Option<SwiftMessage<MT292>> {
409        match self {
410            ParsedSwiftMessage::MT292(msg) => Some(*msg),
411            _ => None,
412        }
413    }
414    pub fn into_mt296(self) -> Option<SwiftMessage<MT296>> {
415        match self {
416            ParsedSwiftMessage::MT296(msg) => Some(*msg),
417            _ => None,
418        }
419    }
420    pub fn into_mt900(self) -> Option<SwiftMessage<MT900>> {
421        match self {
422            ParsedSwiftMessage::MT900(msg) => Some(*msg),
423            _ => None,
424        }
425    }
426    pub fn into_mt910(self) -> Option<SwiftMessage<MT910>> {
427        match self {
428            ParsedSwiftMessage::MT910(msg) => Some(*msg),
429            _ => None,
430        }
431    }
432    pub fn into_mt920(self) -> Option<SwiftMessage<MT920>> {
433        match self {
434            ParsedSwiftMessage::MT920(msg) => Some(*msg),
435            _ => None,
436        }
437    }
438    pub fn into_mt935(self) -> Option<SwiftMessage<MT935>> {
439        match self {
440            ParsedSwiftMessage::MT935(msg) => Some(*msg),
441            _ => None,
442        }
443    }
444    pub fn into_mt940(self) -> Option<SwiftMessage<MT940>> {
445        match self {
446            ParsedSwiftMessage::MT940(msg) => Some(*msg),
447            _ => None,
448        }
449    }
450    pub fn into_mt941(self) -> Option<SwiftMessage<MT941>> {
451        match self {
452            ParsedSwiftMessage::MT941(msg) => Some(*msg),
453            _ => None,
454        }
455    }
456    pub fn into_mt942(self) -> Option<SwiftMessage<MT942>> {
457        match self {
458            ParsedSwiftMessage::MT942(msg) => Some(*msg),
459            _ => None,
460        }
461    }
462    pub fn into_mt950(self) -> Option<SwiftMessage<MT950>> {
463        match self {
464            ParsedSwiftMessage::MT950(msg) => Some(*msg),
465            _ => None,
466        }
467    }
468    pub fn into_mt299(self) -> Option<SwiftMessage<MT299>> {
469        match self {
470            ParsedSwiftMessage::MT299(msg) => Some(*msg),
471            _ => None,
472        }
473    }
474
475    /// Validate using SWIFT SR2025 network validation rules
476    pub fn validate(&self) -> ValidationResult {
477        match self {
478            ParsedSwiftMessage::MT101(mt101) => mt101.validate(),
479            ParsedSwiftMessage::MT103(mt103) => mt103.validate(),
480            ParsedSwiftMessage::MT104(mt104) => mt104.validate(),
481            ParsedSwiftMessage::MT107(mt107) => mt107.validate(),
482            ParsedSwiftMessage::MT110(mt110) => mt110.validate(),
483            ParsedSwiftMessage::MT111(mt111) => mt111.validate(),
484            ParsedSwiftMessage::MT112(mt112) => mt112.validate(),
485            ParsedSwiftMessage::MT190(mt190) => mt190.validate(),
486            ParsedSwiftMessage::MT191(mt191) => mt191.validate(),
487            ParsedSwiftMessage::MT192(mt192) => mt192.validate(),
488            ParsedSwiftMessage::MT196(mt196) => mt196.validate(),
489            ParsedSwiftMessage::MT199(mt199) => mt199.validate(),
490            ParsedSwiftMessage::MT200(mt200) => mt200.validate(),
491            ParsedSwiftMessage::MT202(mt202) => mt202.validate(),
492            ParsedSwiftMessage::MT204(mt204) => mt204.validate(),
493            ParsedSwiftMessage::MT205(mt205) => mt205.validate(),
494            ParsedSwiftMessage::MT210(mt210) => mt210.validate(),
495            ParsedSwiftMessage::MT290(mt290) => mt290.validate(),
496            ParsedSwiftMessage::MT291(mt291) => mt291.validate(),
497            ParsedSwiftMessage::MT900(mt900) => mt900.validate(),
498            ParsedSwiftMessage::MT910(mt910) => mt910.validate(),
499            ParsedSwiftMessage::MT920(mt920) => mt920.validate(),
500            ParsedSwiftMessage::MT292(mt292) => mt292.validate(),
501            ParsedSwiftMessage::MT296(mt296) => mt296.validate(),
502            ParsedSwiftMessage::MT299(mt299) => mt299.validate(),
503            ParsedSwiftMessage::MT935(mt935) => mt935.validate(),
504            ParsedSwiftMessage::MT940(mt940) => mt940.validate(),
505            ParsedSwiftMessage::MT941(mt941) => mt941.validate(),
506            ParsedSwiftMessage::MT942(mt942) => mt942.validate(),
507            ParsedSwiftMessage::MT950(mt950) => mt950.validate(),
508        }
509    }
510}