Crate swift_mt_message

Source
Expand description

§Swift MT Message Parser - Enhanced Architecture

A comprehensive Rust library for parsing SWIFT MT (Message Type) messages with strong typing, complex field structures, comprehensive validation, and flattened JSON serialization.

§Key Features

  • Complex Field Structures: Full enum-based field variants (Field50: A/F/K, Field59: A/Basic)
  • Flattened JSON Serialization: Clean JSON output without enum wrapper layers
  • Type-safe field parsing with dedicated field structs and automatic validation
  • Comprehensive Field Support: All MT103 fields with proper SWIFT compliance
  • Bidirectional Serialization: Perfect round-trip JSON serialization/deserialization
  • Extensive Validation: BIC validation, field length checks, format compliance

§Supported Field Types

§Complex Enum Fields

  • Field50 (Ordering Customer): 50A (Account+BIC), 50F (Party+Address), 50K (Name+Address)
  • Field59 (Beneficiary Customer): 59A (Account+BIC), 59 (Basic lines)

§Institution Fields (with account_line_indicator)

  • Field52A (Ordering Institution): BIC + optional account + account_line_indicator
  • Field53A-57A (Correspondent/Intermediary): All with account_line_indicator support

§Simple Type Fields

  • Field32A (Value Date/Currency/Amount): NaiveDate + String + f64
  • Field20, 23B, 70, 71A: Proper field name alignment with old version

§Example Usage

use swift_mt_message::{SwiftParser, SwiftMessage, messages::MT103};

let raw_mt103 = "{1:F01BANKDEFFAXXX0123456789}{2:I103BANKDEFFAXXXU3003}{4:\n:20:FT21234567890\n:23B:CRED\n:32A:210315EUR1234567,89\n:50K:JOHN DOE\n:52A:BANKDEFF\n:57A:DEUTDEFF\n:59A:/DE89370400440532013000\nDEUTDEFF\n:70:PAYMENT\n:71A:OUR\n-}";
let parsed: SwiftMessage<MT103> = SwiftParser::parse(raw_mt103)?;
let json_output = serde_json::to_string_pretty(&parsed)?;

§JSON Output Structure

The library produces clean, flattened JSON without enum wrapper layers:

{
  "50": {
    "name_and_address": ["JOHN DOE", "123 MAIN ST"]
  },
  "59": {
    "account": "DE89370400440532013000",
    "bic": "DEUTDEFFXXX"
  }
}

Instead of nested enum structures like {"50": {"K": {...}}}.

Re-exports§

pub use errors::ParseError;
pub use errors::Result;
pub use errors::ValidationError;
pub use headers::ApplicationHeader;
pub use headers::BasicHeader;
pub use headers::Trailer;
pub use headers::UserHeader;
pub use parser::SwiftParser;

Modules§

common
Common data types used across multiple fields
errors
fields
headers
messages
parser

Structs§

RawBlocks
Raw message blocks for preservation and reconstruction
SwiftMessage
Complete SWIFT message with headers and body
ValidationResult
Validation result for field and message validation

Traits§

SwiftField
Core trait for all Swift field types
SwiftMessageBody
Core trait for Swift message types

Type Aliases§

SwiftResult
Simplified result type for SWIFT operations

Attribute Macros§

swift_serde
Attribute macro for adding serde rename attributes based on field tags

Derive Macros§

SwiftField
Derive macro for SwiftField trait implementation
SwiftMessage
Derive macro for SwiftMessage trait implementation