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