swift_mt_message/
parsed_message.rs

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