SwiftMTMessage
Enterprise-Grade SWIFT MT Message Processing Library
Macro-driven, type-safe parsing with automatic test data generation
A modern Rust library for parsing SWIFT MT (Message Type) financial messages with macro-based field definitions and serde-like automatic serialization. Built for financial institutions requiring type-safe, high-performance SWIFT message processing with comprehensive test data generation.
๐ Key Features
- Macro-Driven Architecture:
#[derive(SwiftField)]
and#[derive(SwiftMessage)]
for automatic field and message generation - Serde-Like Design: Familiar serialization patterns adapted for financial messaging standards
- Type-safe Parsing: Dedicated field structs with automatic validation
- Sample Data Generation: Automatic generation of valid SWIFT test data with JSON configuration support
- Comprehensive Field Support: All MT103 fields with proper SWIFT compliance
- Zero-Copy Parsing: Efficient parsing with minimal memory allocations
- Financial-Grade Validation: Strict SWIFT compliance with comprehensive error reporting
๐๏ธ Macro-Based Architecture
SwiftField Derive Macro
Define SWIFT fields with automatic parsing, validation, and serialization:
use SwiftField;
// Automatically generates:
// - parse() method with format validation
// - to_swift_string() method
// - validate() method with SWIFT rules
// - sample() and sample_with_config() methods
// - Serde serialization/deserialization
SwiftMessage Derive Macro
Compose complete MT messages using field macros:
use ;
๐ฏ Serde-Like Design for Financial Messages
Automatic Serialization
The library provides serde-like automatic serialization optimized for financial data:
use serde_json;
use ;
// Parse SWIFT message
let mt103: = parse?;
// Automatic JSON serialization with financial field tags
let json = to_string_pretty?;
Output (Financial-Optimized JSON):
Custom Financial Serialization
Complex financial fields use custom serialization for clean JSON:
// Field 50 (Ordering Customer) - Complex enum with 3 variants
// Custom serialization flattens the structure:
// Instead of: {"50": {"K": {"name_and_address": [...]}}}
// Produces: {"50": {"name_and_address": [...]}}
๐ฒ Sample Data Generation
Automatic Test Data Creation
Generate valid SWIFT test data automatically using the same macro-driven approach:
use ;
// Generate individual field samples
let transaction_ref = sample;
println!;
// Output: :20:ABC123DEF4567890
// Generate complete message samples
let mt103_sample = MT103 sample;
let json = to_string_pretty?;
println!;
JSON Configuration-Based Generation
Customize sample generation with JSON configurations for precise test scenarios:
use ;
// Configure field-specific generation
let field_config_json = r#"
{
"length_preference": { "Exact": 16 },
"pattern": "^STP[0-9]{13}$",
"value_range": {
"Amount": {
"min": 10000.0,
"max": 50000.0,
"currency": "EUR"
}
}
}
"#;
let config: FieldConfig = from_str?;
let custom_sample = sample_with_config;
Multi-Scenario Test Generation
Generate test data for different financial scenarios:
let scenarios_json = r#"
[
{
"name": "High Value Transaction",
"config": {
"include_optional": true,
"scenario": "Standard",
"field_configs": {
"32A": {
"value_range": {
"Amount": {
"min": 100000.0,
"max": 1000000.0,
"currency": "USD"
}
}
}
}
}
},
{
"name": "STP Compliant Payment",
"config": {
"include_optional": true,
"scenario": "StpCompliant",
"field_configs": {
"20": {
"pattern": "^STP[0-9]{13}$"
}
}
}
}
]
"#;
let scenarios: = from_str?;
for scenario in scenarios
Format-Aware Generation
Sample generation respects SWIFT format specifications automatically:
// Field with format specification "6!n" (exactly 6 numeric characters)
let sample = sample;
// Generates: "240315" (valid YYMMDD format)
Predefined Scenarios
Built-in scenarios for common testing needs:
- Standard: Basic compliant messages
- StpCompliant: Straight Through Processing optimized
- CoverPayment: Cover payment message format
- Minimal: Only mandatory fields
- Full: All fields populated
use MessageScenario;
let config = MessageConfig ;
let stp_sample = MT103 sample_with_config;
๐ Financial Field Types
Institution Fields (Macro-Generated)
All institution fields are generated with consistent structure:
// Auto-generated methods:
// - validate_bic() - 8 or 11 character validation
// - validate_account() - IBAN/account format checking
// - to_swift_format() - Proper SWIFT field formatting
Complex Financial Enums
// Automatic variant detection during parsing
// Smart serialization without enum wrappers
๐ง Installation
Add this to your Cargo.toml
:
[]
= "2.0.0"
๐ Usage Examples
Basic Financial Message Processing
use ;
let raw_mt103 = r#"{1:F01BANKDEFF0123456789}{2:I103BANKDEFFAXXXU3003}{4:
:20:FT21234567890
:23B:CRED
:32A:210315EUR1234567,89
:50K:ACME CORPORATION
123 BUSINESS AVENUE
NEW YORK NY 10001
:52A:BANKDEFF
:57A:DEUTDEFF
:59A:/DE89370400440532013000
DEUTDEFF
:70:PAYMENT FOR SERVICES
:71A:OUR
-}"#;
// Macro-powered parsing with automatic validation
let parsed: = parse?;
// Serde-like JSON serialization
let json = to_string_pretty?;
println!;
Working with Financial Field Macros
use ;
// Macro-generated field creation with validation
let ordering_customer = K;
let beneficiary = A;
// Automatic SWIFT format generation
println!;
Financial Validation
use Field52A;
// Macro-generated validation with financial rules
let institution = new?;
// Automatic validation includes:
// - BIC format (8 or 11 characters)
// - Account number length (max 34 chars)
// - SWIFT compliance checking
assert!;
๐๏ธ Macro Architecture
Field Generation Pipeline
SWIFT Field Definition
โ
#[derive(SwiftField)] Macro
โ
Generated Implementation:
โโโ parse() - Format-aware parsing
โโโ validate() - SWIFT compliance
โโโ to_swift_string() - Format generation
โโโ sample() - Test data generation
โโโ sample_with_config() - Configurable generation
โโโ Serde traits - JSON serialization
Message Composition
Individual Fields (Macro-Generated)
โ
#[derive(SwiftMessage)] Macro
โ
Complete MT Message:
โโโ Field validation pipeline
โโโ Message structure validation
โโโ Automatic header handling
โโโ Sample data generation
โโโ Financial JSON serialization
๐ฏ Financial-Grade Features
SWIFT Compliance
- Format Validation: Automatic SWIFT format checking
- Field Length Limits: Enforced character limits per SWIFT standards
- BIC Validation: Strict 8/11 character BIC code validation
- Currency Codes: ISO 4217 currency validation
- Date Formats: SWIFT-compliant date parsing (YYMMDD)
Performance Optimizations
- Zero-Copy Parsing: Minimal memory allocations during parsing
- Compile-Time Generation: Macro-generated code for optimal performance
- Efficient Serialization: Custom serialization for financial data structures
- Memory Safety: Rust's ownership system prevents financial data corruption
Error Handling
- Structured Errors: Detailed error types for financial message validation
- Field-Level Errors: Precise error reporting with field tags
- Compliance Reporting: SWIFT standard violation reporting
- Recovery Strategies: Graceful handling of malformed financial data
๐งช Testing
Run the comprehensive test suite:
Test with financial message examples:
Run sample generation examples:
# Basic sample generation
# JSON configuration-based generation
๐ Macro Reference
SwiftField Attributes
Attribute | Purpose | Example |
---|---|---|
#[format("4!c")] |
Field format specification | 4 characters, alphabetic |
#[variant("A")] |
Enum variant tag | Field50A variant |
#[validate(bic)] |
Custom validation | BIC code validation |
#[sample(generator)] |
Custom sample generator | Specialized test data |
SwiftMessage Attributes
Attribute | Purpose | Example |
---|---|---|
#[field("20")] |
SWIFT field tag | Transaction reference |
#[optional] |
Optional field | Non-mandatory fields |
#[swift_serde(...)] |
Serialization control | Field tag mapping |
#[sample_scenario(...)] |
Default sample scenario | StpCompliant generation |
๐ Financial Validation Rules
- BIC Codes: 8 or 11 characters, alphanumeric (SWIFT standard)
- Account Numbers: Maximum 34 characters (IBAN compliance)
- Currency Codes: 3-character ISO 4217 codes
- Amount Formats: Decimal precision with currency-specific rules
- Date Formats: YYMMDD format with leap year validation
- Message Structure: Complete MT message validation
๐ฏ Sample Generation Features
- Format-Driven: Generates data based on SWIFT format specifications
- Validation-Aware: All generated data passes SWIFT compliance checks
- JSON Configurable: External configuration for test scenarios
- Scenario-Based: Predefined scenarios for common testing needs
- Type-Safe: Generated samples match field type constraints
- Reproducible: Configurable random seed for deterministic testing
๐ค Contributing
We welcome contributions! Please ensure:
- Financial compliance testing
- Macro documentation updates
- SWIFT standard adherence
- Test coverage for new features
๐ข About Plasmatic
SwiftMTMessage is developed by Plasmatic, a technology organization focused on building open-source financial infrastructure tools. We believe in:
- ๐ Open Source: Transparent, community-driven development
- ๐ก๏ธ Security First: Financial-grade security and compliance
- โก Performance: High-performance solutions for enterprise needs
- ๐ Global Standards: Supporting international financial protocols
๐ License
Licensed under the Apache License, Version 2.0 (LICENSE)
๐ Related Projects
- Reframe - SWIFT MT โ ISO 20022 Transformation Engine
- MXMessage - MX Message - ISO20022 Parser Library