swift_mt_message/
lib.rs

1//! # Swift MT Message Parser
2//!
3//! A comprehensive Rust library for parsing SWIFT MT (Message Type) messages with strong typing,
4//! field validation, and extensible architecture. This library provides both high-level message
5//! parsing and low-level field access with excellent error reporting.
6//!
7//! ## Features
8//!
9//! - **Type-safe field parsing** with dedicated field structs
10//! - **Comprehensive validation** using SWIFT format rules
11//! - **Extensible field registry** for custom field types
12//! - **Rich error diagnostics** with context information
13//! - **Generic message support** for unknown message types
14//! - **Backward compatibility** with existing APIs
15//!
16//! ## Supported Message Types
17//!
18//! - MT102: Multiple Customer Credit Transfer
19//! - MT103: Single Customer Credit Transfer
20//! - MT103-STP: Single Customer Credit Transfer (Straight Through Processing)
21//! - MT192: Request for Cancellation
22//! - MT195: Queries
23//! - MT196: Answers
24//! - MT197: Copy of a Message
25//! - MT199: Free Format Message
26//! - MT202: General Financial Institution Transfer
27//! - MT940: Customer Statement Message
28//! - MT941: Balance Report Message
29//! - MT942: Interim Transaction Report
30//!
31//! ## Example Usage
32//!
33//! ### High-level API (recommended)
34//!
35//! ```rust
36//! use swift_mt_message::{field_parser::SwiftMessage, mt_models::mt103::MT103};
37//!
38//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
39//! let message_text = "{1:F01BANKDEFFAXXX0123456789}{2:I103BANKDEFFAXXXU3003}{4:\n:20:FT21234567890\n:23B:CRED\n:32A:210315EUR1234567,89\n:50K:JOHN DOE\n:59:JANE SMITH\n:71A:OUR\n-}";
40//!
41//! // Parse as generic message
42//! let message = SwiftMessage::parse(message_text)?;
43//! println!("Message type: {}", message.message_type);
44//!
45//! // Convert to specific message type
46//! let mt103 = MT103::from_swift_message(message)?;
47//! println!("Transaction reference: {}", mt103.field_20.transaction_reference);
48//! # Ok(())
49//! # }
50//! ```
51//!
52//! ### MT103-STP with Enhanced Validation
53//!
54//! ```rust
55//! use swift_mt_message::{field_parser::SwiftMessage, mt_models::mt103_stp::MT103STP};
56//!
57//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
58//! let message_text = "{1:F01BANKDEFFAXXX0123456789}{2:I103BANKDEFFAXXXU3003}{4:\n:20:STP123456789\n:23B:CRED\n:32A:210315EUR1234567,89\n:50K:JOHN DOE\n:59A:DEUTDEFF\n:71A:OUR\n-}";
59//!
60//! // Parse as MT103-STP with enhanced validation
61//! let message = SwiftMessage::parse(message_text)?;
62//! let mt103_stp = MT103STP::from_swift_message(message)?;
63//!
64//! // Check STP compliance
65//! if mt103_stp.is_stp_compliant() {
66//!     println!("Message is STP compliant");
67//! } else {
68//!     let violations = mt103_stp.get_stp_violations();
69//!     for violation in violations {
70//!         println!("STP Rule {} violated: {}", violation.rule, violation.description);
71//!     }
72//! }
73//! # Ok(())
74//! # }
75//! ```
76//!
77//! ### Field-level Access
78//!
79//! ```rust
80//! use swift_mt_message::field_parser::{SwiftMessage, SwiftField};
81//!
82//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
83//! let message_text = "{1:F01BANKDEFFAXXX0123456789}{2:I103BANKDEFFAXXXU3003}{4:\n:20:FT21234567890\n:23B:CRED\n:32A:210315EUR1234567,89\n:50K:JOHN DOE\n:59:JANE SMITH\n:71A:OUR\n-}";
84//! let message = SwiftMessage::parse(message_text)?;
85//!
86//! // Access individual fields with type safety
87//! for (tag, field) in &message.fields {
88//!     println!("{}: {}", tag, field.to_swift_string());
89//! }
90//! # Ok(())
91//! # }
92//! ```
93
94pub mod config;
95pub mod errors;
96pub mod field_parser;
97pub mod json;
98pub mod mt_models;
99pub mod tokenizer;
100pub mod utils;
101pub mod validation;
102pub mod validator;
103
104pub use errors::{ErrorCollection, ErrorContext, FieldParseError, ParseError, ValidationError};
105pub use field_parser::{SwiftField, SwiftFieldContainer, SwiftMessage};
106pub use json::{FromJson, JsonBlocks, JsonMessage, MessageMetadata, ToJson};
107pub use mt_models::{MT103, MT103STP, MT202, STPRuleViolation, STPValidationReport};
108pub use tokenizer::{SwiftMessageBlocks, extract_blocks, parse_block4_fields};
109pub use validation::{ValidationReport, ValidationResult, validate_mt_message_with_rules};